Cómo utilizar VC++ para programación de red y depuración de clinet.c y server.c en Windows
Primero elimina el código del servidor:
#include
#include
void main ()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD ( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Dígale al usuario que no pudimos encontrar un */
/* WinSock DLL utilizable */
return;
}
/* Confirme eso. la DLL de WinSock admite 2.2.*/
/* Tenga en cuenta que si la DLL admite versiones superiores */
/* a 2.2 además de 2.2, aún devolverá */
/* 2.2 en wVersion ya que esa es la versión que */
/* solicitamos */
if ( LOBYTE( wsaData.wVersion ) != 2. ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Dígale al usuario que no pudimos encontrar un utilizable */
/ * WinSock DLL. */
WSACleanup( );
return
}
SOCKET sockSrv=socket(AF_INET, SOCK_DGRAM, 0 );
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(5050);
addrSrv . sin_addr.S_un.S_addr=htonl(INADDR_ANY);
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char recvBuf[200]; p >
char sendBuf[200];
char Buf[400];
SOCKADDR_IN addrCli;
int len = sizeof(SOCKADDR);
int a=1;
for(;;)
{
recvfrom(sockSrv,recvBuf,200,0,(SOCKADDR*)&addrCli,&len);
si ('q'==recvBuf[0])
{
sendto(sockSrv,"q",strlen("q")+1,0,(SOCKADDR*)&addrCli ,len);
printf("¡chatear!");
break;
}
sprintf(Buf,"% s decir: %s",inet_ntoa(addrCli.sin_addr),recvBuf);
printf("%s\n",Buf);
if(a==1)
printf("Diga algunas palabras ('p' para salir): \n");
gets(sendBuf);
sendto(sockSrv,sendBuf ,strlen(sendBuf)+1,0,(SOCKADDR*)&addrCli,len);
a++;
}
closesocket(sockSrv); p> p>
WSACleanup();
}
El siguiente es el código del cliente:
#include
#include
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err ! = 0 ) {
/* Dígale al usuario que no pudimos encontrar una DLL utilizable */
/* WinSock */
return. ; p>
}
/* Confirme que la DLL de WinSock admite 2.2.*/
/* Tenga en cuenta que si la DLL admite versiones superiores */
/* que 2.2 además de 2.2, aún devolverá */
/* 2.2 en wVersion ya que esa es la versión que */
/* solicitamos. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Decir el usuario
que no pudimos encontrar una DLL de WinSock */
/* utilizable */
WSACleanup( );
return
. }
SOCKET sockCli=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(5050);
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
char recvBuf[200];
char sendBuf[200];
char Buf[400];
int len=sizeof(SOCKADDR);
int a=1;
for(;;)
{
if(a==1)
printf("Di algunas palabras ('p' para salir):\n");
gets(sendBuf);
sendto(sockCli,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len );
recvfrom(sockCli,recvBuf,strlen(recvBuf)+1,0,(SOCKADDR*)&addrSrv,&len);
if('q'==recvBuf[0 ])
{
sendto(sockCli,"q",strlen("q")+1,0,(SOCKADDR*)&addrSrv,len);
printf("¡charla!");
descanso;
}
sprintf(Buf,"%s dice: %s",inet_ntoa( addrSrv.sin_addr),recvBuf);
printf("%s\n",Buf);
a++;
}
}
El programa anterior utiliza el protocolo UDP. Si desea el protocolo TCP, se lo puedo enviar en dos días.