Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Problema con la función recvfrom de programación de red VC++?

¿Problema con la función recvfrom de programación de red VC++?

Ya que me diste los puntos, debería ayudarte a resolverlo. Esta es una sala de chat simple que se puede usar después de la prueba. Por favor, eche un vistazo al código fuente. Programa del lado del servidor:

1. Cree un socket.

2. Vincular el socket a la dirección y al puerto local (vincular).

3. Esperando recibir datos (recvfrom).

4. Cerrar el enchufe.

#include

#include

#include // El archivo de encabezado del socket debe estar cargado y debe también se incluirá en el proyecto Add Ws2_32.lib

int main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

//Solicita la versión del socket

wVersionRequested = MAKEWORD(1, 1); //Utiliza la macro MAKEWORD para solicitar la versión 1.1 de la biblioteca Winsock

err = WSAStartup( wVersionRequested, &wsaData ); //Carga el conjunto de bytes y determina la versión que se utilizará

if ( err != 0 )

{

return 0;

}

if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) ! = 1 ) // ¿El byte bajo y el alto es el byte 1?

{

WSACleanup( ); // Terminar el uso de la biblioteca Winsock

return 0;

}

//Crear un socket

SOCKET sock=socket(AF_INET,SOCK_DGRAM,0); //Definir un calcetín para recibir el retorno. socket

//Definir una estructura de dirección

SOCKADDR_IN ip;

ip.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //IP, o usar ip.sin_addr.S_un .S_addr=inet_addr("127.0.0.1");

ip.sin_family=AF_INET; //Especificar familia de direcciones

ip.sin_port=htons(8888) ; //Puerto/ /Enlazar socket

bind(sock,(SOCKADDR*)&ip,sizeof(SOCKADDR)); //Enviar datos

char recvbuf [100 ]; //Aceptar datos

char temp[200]; //Otros usos SOCKADDR_IN client; //Se utiliza para aceptar la información de la dirección del cliente

int len=sizeof(SOCKADDR) ); //Longitud

while(true)

{

//Aceptar datos

recvfrom(sock,recvbuf,100, 0, (SOCKADDR*)&cliente,&len);

if(strcmp("out",recvbuf)==0)

{

sendto(sock ," out",sizeof("out")+1,0,(SOCKADDR*)&client,len); //La dirección se obtuvo cuando llamamos a recvfrom

cout&.

lt;<"El programa cliente ha salido y el chat ha finalizado\n";

break;

}

sprintf(temp,"La IP pertenece a %s La gente dice: %s",inet_ntoa(client.sin_addr),recvbuf);

cout<

cin.getline(sendbuf,100 );

p>

sendto(sock,sendbuf,sizeof(sendbuf)+1,0,(SOCKADDR*)&client,len);

}

closesocket(calcetín);

WSACleanup();

devuelve 0;

}

------ --------- -

Programa cliente:

1.

2. Enviar datos al servidor (sendto).

3. Cerrar el enchufe.

#include // Se debe cargar el archivo de encabezado del socket y se debe agregar Ws2_32.lib al enlace del proyecto

#include

#include

int main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

//Solicita la versión del socket

wVersionRequested = MAKEWORD(1, 1); //Utiliza la macro MAKEWORD para solicitar la versión 1.1 de la biblioteca Winsock

err = WSAStartup( wVersionRequested, &wsaData ); //Carga el conjunto de bytes y determina la versión que se utilizará

if ( err != 0 )

{

return 0;

}

if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) ! = 1 ) // ¿El byte bajo y el alto es el byte 1?

{

WSACleanup( ); // Terminar el uso de la biblioteca Winsock

return 0;

} //Crear socket

SOCKET sock=socket(AF_INET,SOCK_DGRAM,0);

//Enviar datos

SOCKADDR_IN fuwuqi;

fuwuqi.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");

fuwuqi.sin_family=AF_INET;

fuwuqi. sin_port=htons(8888);

char sendbuf[100];

char recvbuf[100];

char temp[200];

int len=sizeof( SOCKADDR);

while(true)

{

cout<<"Por favor, ingresa lo que quieres decir\n ";

cin.getline(sendbuf,100);

sendto(sock,sendbuf,sizeof(sendbuf)+1,0,(SOCKADDR*)&fuwuqi,len);

recvfrom(sock ,recvbuf,100,0,(SOCKADDR*)&fuwuqi,&len);

if(strcmp(recvbuf,"out")==0)

{

cout<<"Salida del programa\n";

pausa;

}

sprintf(temp," El servidor %s dijo: %s", inet_ntoa(fuwuqi.sin_addr),recvbuf);

cout<

}

closesocket (calcetín);

WSACleanup();

}<

/p>