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"? p >
#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;?
}