Red de conocimiento informático - Material del sitio web - Cómo utilizar VC++ para programación de red y depuración de clinet.c y server.c en Windows

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];

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>

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. ;

}

/* 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.