Red de conocimiento informático - Descarga de software - Cómo implementar la comunicación multiproceso entre el cliente y el servidor usando el socket C++

Cómo implementar la comunicación multiproceso entre el cliente y el servidor usando el socket C++

Una idea es utilizar funciones multiproceso en el lado del servidor. Cuando se recibe una solicitud del cliente, se abre un nuevo hilo para realizar la comunicación entre el cliente y el servidor.

Para métodos específicos, consulte el siguiente ejemplo (compilado en vs2015): //Lado del servidor:

#define?_WINSOCK_DEPRECated_NO_WARNINGS?

#include ?

#include?

#include?

#pragma?comment(lib,?"ws2_32.lib ")?

usando?namespace?std;?

enum{PORT?=?8621};?

void?thread_fun(void?*p) ?

{?

//Función del hilo de comunicación

char?s[1024];?

SOCKET?socka?=? (SOCKET)p;?

char?*str?=?"¡hola?cliente!";?

sockaddr_in?sa?=?{?AF_INET?};?

int?n_Len?=?sizeof(sa);?

send(socka,?str,?strlen(str),?0);?

/ /Obtener la dirección IP del cliente

getpeername(socka,?(sockaddr*)&sa,?&n_Len);?

cout?<

while?(true)//¿Bucle para recibir datos?

{?

int?i?=?recv(socka,?s,?sizeof(s),?0);?

if?(i? < =?0)?

{?

cout?<

cout?<

break;?

}?

s[i]?=?0;?

cout?<

}?

}

int?main()?

{?

WSADATA?wd;?

WSAStartup(0x0202,?&wd);//Inicializar la carga de ws2_32. lib

SOCKET?sock?=?socket(AF_INET,?SOCK_STREAM,?0);?//¿Inicializar el socket?

if?(sock?==?INVALID_SOCKET)?

{?

cout?<

retorno?-1;?

}?

calcetín

dr_in?sa?=?{?AF_INET,htons(PORT)?};?

if?(bind(sock,?(sockaddr*)&sa,?sizeof(sa))?

{?

cout?<

return?-1;

}?

escucha(calcetín,?5);//¿Escuchas?

mientras?(verdadero)?

{ ?

SOCKET?socka?=?accept(sock,0,NULL);?//¿Toma de comunicación?

_beginthread(thread_fun,?0,?(void*) socka); ?//Crear hilo

}?

return?0;?

}?

//Cliente:

#define?_WINSOCK_DEPRECATED_NO_WARNINGS?

#include?

#include?

#comentario(lib, ?"ws2_32.lib")?

usando?namespace?std;?

enum?{?PORT?=?8621?};? ?main()?

{?

WSADATA?wd;?

WSAStartup(0x0202,?&wd);//Inicializar carga ws2_32 .lib

SOCKET?sock?=?socket(AF_INET,?SOCK_STREAM,?0);?//¿Inicializar el socket?

if?(sock?==?INVALID_SOCKET )?

{?

cout?<

retorno?-1;?

}?

sockaddr_in?sa?=?{?AF_INET,htons(PORT)?};//¿Especificar información de dirección?

sa.sin_addr.S_un.S_addr? =?inet_addr(" 127.0.0.1");?

int?n_Len?=?sizeof(sa);?

if(SOCKET_ERROR?==connect(sock,?( sockaddr*)&sa, ?n_Len))?//¿Conexión?

{?

cout?<

retorno?- 1;?

}?

char?s[1024];?

int?n?=?recv(calcetín,? s,?sizeof( s),?0);//¿Recibir datos?

if?(n?>?0)?

{?

s[n]? =?0;?

cout?<

}?

¿mientras?(verdadero )?

{?

cout?<

cin?>>?s;?

enviar(calcetín,?s,?strl

es(s),?0);?

}?

retorno?0;?

}