Estoy usando bloques de código, ¿cómo puedo copiar el código aquí y conservar los colores y las líneas para que puedas copiarlo directamente a tu computadora?
#include
#include
#include
#include
# include
#include
#define PROTOPORT 5188 /* El número de puerto de protocolo predeterminado del socket de escucha*/
#define QLEN 6 /* El tamaño de la cola de solicitudes del socket de escucha*/
#define MAX 1000
HANDLE hMutex;
int flag;
void Send(cliente SOCKET);
void Recv(cliente SOCKET);
int main(int argc,char *argv[])
{
//Inicializar DLL
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
struct sockaddr_in servaddr /* Guardar la estructura de la dirección de red del servidor*/
struct sockaddr_in clientaddr /* Guarde el cliente La estructura de la dirección de red final*/
SOCKET listenfd /* Descriptor de socket de escucha*/
SOCKET clientfd /* Descriptor de socket de respuesta*/ p>
int port; /* Número de puerto del protocolo*/
int alen /* Longitud de la dirección*/
memset((char*)& servaddr, 0, sizeof (servaddr) ) ); /* Borrar estructura sockaddr*/
servaddr.sin_family = AF_INET; /* Establecer en familia de protocolos de Internet*/
servaddr.sin_addr.s_addr = INAF_INETs_addr = INADDR_ANY ; * Configure la dirección IP local */
/* Verifique los parámetros de la línea de comando; si se especifica el número de puerto, use el número de puerto; de lo contrario, use el número de puerto predeterminado*/
if (argc > 1){
port = atoi(argv[1]);/* Si se especifica un número de puerto, conviértalo a un número entero*/
} else {
port = PROTOPORT; /* De lo contrario, utilice el número de puerto predeterminado*/
}
if(port> 0) /* Pruebe si el número de puerto es legal*/
servaddr.sin_port=htons((u_short)port);
else{ /* Imprimir mensaje de error y salir*/
fprintf( stderr, "número de puerto incorrecto %s\n", argv[1]);
exit(1);
}
/* Crear un
Conector de transmisión para escuchar*/
listeningfd = socket (AF_INET,SOCK_STREAM,0);
if (listenfd <0) {
fprintf(stderr, "Error en la creación del socket\n");
exit(1);
}
/* Vincula la dirección local al socket de escucha Receptor*/
if (bind(listenfd,(struct sockaddr *)& servaddr, sizeof(servaddr)) < 0){
fprintf(stderr, "vinculación fallida\n ") ; p>
exit(1);
}
/* Comience a escuchar y especifique la longitud de la cola de solicitudes del socket de escucha*/
if ( escuchar(escucharfd, QLEN) < 0){
fprintf(stderr, "escuchar archivo\n" );
salir(1);
}
hMutex=CreateMutex(NULL,FALSE,NULL); //crea mutex
/* El bucle principal del servidor acepta y maneja solicitudes de conexión de los clientes */ p>
char sendbuf[MAX];
while(1) {
alen = sizeof(clientaddr); /* Acepta la solicitud de conexión del cliente y genera un socket de respuesta */
if((clientfd = aceptar(listenfd, (struct sockaddr *)& clientaddr, &alen)) < 0 ){
fprintf(stderr, "aceptar fallido\n");
exit(1);
}
flag=1;
printf("Recibió una conexión:%s\n", inet_ntoa(clientaddr.sin_addr ));
/*Crear un hilo para recibir datos en un bucle*/
HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Recv,(LPVOID) clientfd,0 ,0);
if(hThread! =NULL)
{
CloseHandle(hThread);
}
while(bandera!=0)
{
gets(sendbuf);
send(clientfd,sendbuf,sizeof(sendbuf),0);//enviar datos
} p>
}
closesocket(listenfd);
WSACleanup();
devuelve 0;
}
void Recv(cliente SOCKET)
{
char recvbu
f[MAX];
int n=0;
while(strcmp(recvbuf, "salir"))
{
WaitForSingleObject(hMutex,INFINITE); //Bloquear para evitar recibir datos
n=recv(client,recvbuf,sizeof(recvbuf),0);
if(n>0) {
recvbuf[n]=0;
printf(" cliente: %s\n",recvbuf);
}
ReleaseMutex(hMutex);
Sleep(100);
}
closesocket(cliente);
printf("Desconectando de este usuario");
flag=0;
}