Red de conocimiento informático - Material del sitio web - Cómo utilizar SOCKET para lograr la comunicación entre dos computadoras

Cómo utilizar SOCKET para lograr la comunicación entre dos computadoras

Dos partes de código, un servidor y un cliente.

Código del lado del servidor: #include?"stdio.h"?

#include?"Winsock2.h"?

#include?"iostream" ?

#include?"string"?

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

//define? ¿IP del host y puerto utilizable?

#define?HOST_IP?127.0.0.1?

#define?HOST_PORT?8080?

#define ? OK_STR?"OK"?

void?main(){?

//la?versión?bit?de?Winsock?

int?version_a ? =?1; //¿bit?bajo?

int?version_b?=?1; //¿bit?alto

//makeword?

WORD ?versionRequest?=?MAKEWORD(version_a, version_b);?

WSAData?wsaData;?

int?err;?

err?=?WSAStartup ( versionRequest,?amp;wsaData);

if(err?!=?0?){?

printf("ERROR!");?

devolver;?

}?

if?(LOBYTE(wsaData.wVersion)?!=?1?||?HIBYTE(wsaData.wVersion)?!=?1)

{?

printf("¿MAL? ¿WINSOCK? VERSIÓN!");?

WSACleanup();?

regresar ; ?

}?

SOCKET?socServer?=?socket(AF_INET,?SOCK_DGRAM,0);?

SOCKADDR_IN?addr_Srv;?

//¿Es?nido?tres?estructuras?as?S_un_b,?S_un_w?y?S-un.(unión)?

addr_Srv.sin_addr.S_un.S_addr?=?htonl( INADDR_ANY );?

//set?protocol?family?

addr_Srv.sin_family?=?AF_INET;?

//set?host?port?

addr_Srv.sin_port?=?htons(HOST_PORT);?

//bind?socket?to?the?host?

bind(socServer, ( ? SOCKADDR*)?amp; addr_Srv,?sizeof(SOCKADDR));? //¿dirección?de?un?cliente?

SOCKADDR_IN?addr_Clt;?

char?recvBuf[ 100 ];?

int?fromlen?=?tamañode

(SOCKADDR);?

mientras(true){?

recvfrom(socServer,?recvBuf,?100,?0,?(SOCKADDR*)?amp;addr_Clt,?amp ;fromlen);?std::coutlt;lt;recvBuflt;lt;std::endl;?

sendto(socServer,?OK_STR,?strlen(OK_STR) 1,?0,?(SOCKADDR* )amp; addr_Clt, tamaño de(SOCKADDR));?

}?

closesocket(socServer);?

WSACleanup();?

} Código del lado del cliente: #include?"Winsock2.h"?

#include?"iostream"?

#include?"stdio.h"?

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

#define?HOST_IP?"127.0.0.1"?

#define?HOST_PORT? 8080

void?main(){?

//la?versión?bit?de?Winsock?

int?version_a?=?1; / /¿bit?bajo?

int?version_b?=?1; //¿bit?alto?

//makeword?

WORD?versionRequest?= ? MAKEWORD(version_a,version_b);?

WSAData?wsaData;?

int?error;?

error?=?WSAStartup(versionRequest,?amp ; wsaData);

if(error?=?0){?

printf("¡ERROR!");?

return;?

}?

if?(LOBYTE(wsaData.wVersion)?!=?1?||?HIBYTE(wsaData.wVersion)?!=?1)?

{?

printf("¿MAL? ¿WINSOCK? VERSIÓN!");?

WSACleanup();?

return;?

}?

//request?info?obtenido?por?entrada?del usuario?

char?requestStr[100];?

//build ?a?socket

SOCKET?socClient?=?socket(AF_INET,?SOCK_DGRAM,?0);?

SOCKADDR_IN?addrSrv;?

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

addrSrv.sin_family=AF_INET;?//set?the?protocol?family?

addrSrv.sin_port = htón

s(HOST_PORT);?//establecer?el?número?de?puerto?

//?array?para?almacenar?los?datos?esa?retroalimentación?del?servidor.?

char?cRecvBuf[100];?

while(true){? std::cingt;gt;requestStr;?

//sendto?function?is?used?to? ¿enviar?datos?del?programa?al?servidor?

sendto(socClient,?requestStr,?strlen(requestStr) 1,?0,?(SOCKADDR*)?amp;addrSrv,?sizeof(SOCKADDR ));? recv(socClient,?cRecvBuf,?strlen(cRecvBuf) 1,?0);? std::coutlt;lt;?cRecvBuf?lt;lt;?std::endl;?

}?

//¿cerrar?el?socket?y?limpiar?los?wsadata?

cerrarsocket(socClient);?

WSACleanup(); ?

//?return?0;?

}