Cómo escribir servidor y cliente SOCKET en vc++6. Es mejor seguir pasos específicos.
1. Servidor simple//#include//#pragmacomment(lib,"WS2_32.lib")WSADATAwsd;staticUINTport=%%1;UINTListen(LPVOIDpParam){SOCKETsServer,sClient;charbuf[1024]; intretVal;if(WSAStartup(MAKEWORD(2,2),&wsd)!=0){return-1;//Failure}sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET==sServer){WSACleanup() ;return-1;//Error al crear el socket}SOCKADDR_INaddrServ;addrServ.sin_family=AF_INET;addrServ.sin_port=htons((short)pParam);addrServ.sin_addr.s_addr=INADDR_ANY;retVal=bind(sServer,(LPSOCKADDR) &addrServ ,sizeof(SOCKADDR_IN));if(SOCKET_ERROR==retVal){closesocket(sServer);WSACleanup();return-1;//No se pudo vincular el socket}retVal=listen(sServer,1);if(SOCKET_ERROR ==retVal ){closesocket(sServer);WSACleanup();return-1;//Error al iniciar la escucha}sockaddr_inaddrClient;intaddrClientlen=sizeof(addrClient);sClient=accept(sServer,(sockaddrFAR*)&addrClient,&addrClientlen);if( INVALID_SOCKET= =sClient){closesocket(sServer);WSACleanup();return-1;//Error al comenzar a aceptar conexiones de cliente}ZeroMemory(buf,sizeof(buf));retVal=recv(sClient,buf,sizeof(buf) ,0 );if(SOCKET_ERROR==retVal){closesocket(sServer);closesocket(sClient);WSACleanup();return-1;//Error al recibir datos}CString%%2(buf);closesocket(sServer);closesocket ( sClient);WSACleanup();return0;}CWinThread*pThread=AfxBeginThread(Listen,&port);2. Cliente simple//#include//#pragmacomment(lib,"WS2_32.lib")WSADATAwsd;SOCKETsHost;SOCKADDR_INservAddr; 1024];intretVal;if(WSAStartup(MAKEWORD(2,2),&wsd)!=0){return-1;//Failure}sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET==sHost){ Limpieza WSA()
;return-1;//Error al crear el socket}servAddr.sin_family=AF_INET;servAddr.sin_addr.s_addr=inet_addr(%%3);servAddr.sin_port=htons((short)%%2);intnServAddlen=sizeof( servAddr );retVal=connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));if(SOCKET_ERROR==retVal){closesocket(sHost);WSACleanup();return-1;//No se pudo conectar al servidor}ZeroMemory (buf ,sizeof(buf));strcpy(buf,%%3);retVal=send(sHost,buf,sizeof(buf),0);if(SOCKET_ERROR==retVal){closesocket(sHost);WSACleanup() ;return -1;//Error al enviar datos al servidor}closesocket(sHost);WSACleanup();3. Obtener la IP local//#include//#pragmacomment(lib,"WS2_32.lib")WSADATAwsd;if (WSAStartup(MAKEWORD (2,2),&wsd)!=0){return-1;//failure}charszHostname[100],szHostaddress[200];if(gethostname(szHostname,sizeof(szHostname))!=SOCKET_ERROR) {HOSTENT*pHostEnt =gethostbyname(szHostname);if(pHostEnt!=NULL){sprintf(szHostaddress,"%d.%d.%d.%d",(pHostEnt->h_addr_list[0][0]&0x00ff), (pHostEnt-> h_addr_list[0][1]&0x00ff),(pHostEnt->h_addr_list[0][2]&0x00ff),(pHostEnt->h_addr_list[0][3]&0x00ff));}}elsereturn;CString%% 1(szHostaddress) ;4.Comunicación de extremo a extremo//#include//#pragmacomment(lib,"WS2_32.lib")WSADATAwsd;SOCKETs;charbuf[1024];if(WSAStartup(MAKEWORD(2,2), &wsd)!=0) {return-1;//Failure}s=socket(AF_INET,SOCK_DGRAM,0);if(s==INVALID_SOCKET){WSACleanup();return-1;//Error al crear el socket}SOCKADDR_INservAddr ;servAddr.sin_family= AF_INET;servAddr.sin_addr.s_addr=inet_addr(%%1);servAddr.sin_port=htons(INADDR_ANY);if(bind(s,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN))==SOCKET_ERROR) {closesocket(s) ;WSACleanup();return-1;//Error al vincular el socket}intnServAdd
rlen=sizeof(servAddr);ZeroMemory(buf,sizeof(buf));if(recvfrom(s,buf,sizeof(buf),0,(SOCKADDR*)&servAddr,&nServAddrlen)==SOCKET_ERROR){closesocket(s); WSACleanup();return-1;//Error al recibir datos}CString%%2(buf);ZeroMemory(buf,sizeof(buf));strcpy(buf,%%3);SOCKADDR_INclientAddr;clientAddr.sin_family=AF_INET; clientAddr .sin_addr.s_addr=inet_addr(%%4);clientAddr.sin_port=htons((short)%%5);intnClientlen=sizeof(clientAddr);if(sendto(s,buf,sizeof(buf),0,( SOCKADDR *)&clientAddr,nClientlen)==SOCKET_ERROR){closesocket(s);WSACleanup();return-1;//Error al enviar datos al servidor}closesocket(s);WSACleanup();5. comunicación puntual //#include/ /#pragmacomment(lib,"WS2_32.lib")WSADATAwsd;SOCKADDR_INaddrServ,addrServ2;SOCKETsServer,sClient,sHost;intretVal;sockaddr_inaddrClient;charbuf[1024];staticUINTport=%%2;BOOLlistenerRun=TRUE; UINTListen(LPVOIDpParam){addrServ.sin_family=AF_INET;addrServ.sin_port=htons((UINT)pParam);addrServ.sin_addr.s_addr=INADDR_ANY;retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));if( SOCKET_ERROR==retVal){closesocket (sServer);WSACleanup();return-1;//Error al vincular el socket}retVal=listen(sServer,1);if(SOCKET_ERROR==retVal){closesocket(sServer);WSACleanup( );return-1 ;//Error al iniciar la escucha}intaddrClientlen=sizeof(addrClient);sClient=accept(sServer,(sockaddrFAR*)&addrClient,&addClientlen);if(INVALID_SOCKET==sClient){closesocket(sServer);WSACleanup( );return-1; // Error al recibir la solicitud del cliente} while(listenerRun){ZeroMemory(buf,sizeof(buf));retVal=recv(sClient,buf,sizeof(buf));if(SOCKET_ERROR==retVal) {closesocket(sServidor); closesocket(sCliente);WSAC
leanup();return-1;//Error al recibir datos del cliente}CString%%4(buf);}}if(WSAStartup(MAKEWORD(2,2),&wsd)!=0){return-1;// Failure}sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET==sServer){WSACleanup();return-1;//Error al crear el socket}CWinThread*pThread=AfxBeginThread(Listen,&port);sHost= socket (AF_INET,SOCK_STREAM,IPPROTO_TCP);if(INVALID_SOCKET==sHost){WSACleanup();return-1;//Error al crear el socket}servAddr2.sin_family=AF_INET;servAddr2.sin_addr.s_addr=inet_addr(%%1); servAddr.sin_port=htons((short)%%3);intnServerAddrlen=sizeof(servAddr2);retVal=connect(sHost,(LPSOCKADDR)&servAddr2,sizeof(servAddr2));if(SOCKET_ERROR==retVal){closesocket( sHost) ;WSACleanup();return-1;//Error de conexión}zeroMemory(buf,sizeof(buf));strcpy(buf,%%5);retVal=send(sHost,buf,sizeof(buf),0) ;if (SOCKET_ERROR==retVal){closesocket(sHost);WSACleanup();return-1;//Error al enviar datos a}listenerRun=FALSE;DWORDdwExitCode;::GetExitCodeThread(pThread->m_hThread,&dwExitCode);pThread=null; closesocket(sServer);closesocket(sClient);closesocket(sHost);WSACleanup();