Red de conocimiento informático - Problemas con los teléfonos móviles - Programación de sockets

Programación de sockets

También estoy aprendiendo recientemente y tengo un programa de chat en C++ que escribí, que es un poco grande. Lo siguiente está escrito en C

Hay tres tipos de programación de sockets, sockets de transmisión. (SOCK_STREAM), socket de datagrama (SOCK_DGRAM), socket sin formato (SOCK_RAW); la programación de socket basada en TCP utiliza socket de transmisión (SOCK_STREAM). Socket de datagrama (SOCK_DGRAM) basado en UDP.

1. Pasos de programación para el socket de transmisión TCP

Antes de usarlo, debe vincular la función de biblioteca: Proyecto->Configuración ->Enlace- >Ingrese ws2_32.lib, ¡OK!

Programa del lado del servidor:

1. Cargar la biblioteca de sockets

2.

3. Vincular el socket a una dirección y puerto local (vincular).

4. Configure el socket en modo de escucha y prepárese para recibir las solicitudes de los clientes (escuchar).

5. Espere a que llegue la solicitud del cliente; cuando llegue la solicitud, acepte la solicitud de conexión y devuelva un nuevo socket (aceptar) correspondiente a la conexión.

6. Utilice el socket devuelto para comunicarse con el cliente (enviar/recibir).

7. Regrese y espere otra solicitud de cliente.

8. Cerrar el enchufe.

Programa cliente:

1. Cargue la biblioteca de sockets

2.

3. Enviar una solicitud de conexión (connect) al servidor.

4. Comunicarse con el servidor (enviar/recibir).

5. Cierre el socket

El código del lado del servidor es el siguiente:

#include //Agregar archivo de encabezado

#include //Carga los archivos de encabezado de entrada y salida estándar

void main()

{

WORD wVersionRequested; //Número de versión

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 ); //versión 1.1 del socket

err = WSAStartup( wVersionRequested, &wsaData );

if ( err != 0 ) {

return;

}//Cargar el socket biblioteca, si la adición falla, devolverá

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE( wsaData.wVersion ) != 1 ) {

WSACleanup( );

return;

}//Salir si no es 1.1

SOCKET sockSrv=socket(AF_INET,SOCK_STREAM, 0);// Crea un socket.

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//Convertir cortos sin firmar al formato de orden de bytes de red

addrSrv .sin_family =AF_INET;

addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

/ /Vincula el socket a una dirección y puerto local (bind)

listen(sockSrv,5);//Configura el socket en modo de escucha y prepárate para recibir solicitudes de los clientes (listen).

SOCKADDR_IN addrClient;//Definir familia de direcciones

int len=sizeof(SOCKADDR);//Inicializar este parámetro, este parámetro debe inicializarse

while( 1)

{

SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//El tercer parámetro de aceptar debe tener un valor inicial.

// Espere a que llegue la solicitud del cliente; cuando llegue la solicitud, acepte la solicitud de conexión y devuelva un nuevo socket (aceptar) correspondiente a la conexión.

//El programa se bloquea aquí

char sendBuf[100];

sprintf(sendBuf,"Bienvenido %s a _ntoa(addrClient.sin_addr ));

//Utiliza el socket devuelto para comunicarte con el cliente (send/recv)

send(sockConn,sendBuf,strlen(sendBuf)+1,0. );

char recvBuf[100];

recv(sockConn,recvBuf,100,0);

printf("%s\n",recvBuf );

closesocket(sockConn);//Esperar otra solicitud de usuario

}

}

Cliente. p>

#include

#include

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );Cargar biblioteca de sockets

if ( err != 0 ) {

return;

}

if ( LOBYTE( wsaData.wVersion ) != 1 ||

HIBYTE( wsaData.wVersion ) != 1 ) {

WSACleanup( );

return;

}

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);Crear un socket.

SOCKADDR_IN addrSrv;

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

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); emite una solicitud de conexión (conexión) al servidor.

char recvBuf[100]; comunicarse con el servidor (enviar/recv).

recv(sockClient,recvBuf,100,0);

printf("%s\n",recvBuf);

send(sockClient,"Esto es lisi",strlen("Esto es lisi")+1,0);

closesocket(sockClient);Cierra el socket.

WSACleanup();//Esta función debe llamarse para borrar parámetros

}