Red de conocimiento informático - Material del sitio web - Cómo utilizar la tecnología de comunicación de red de socket en TC2

Cómo utilizar la tecnología de comunicación de red de socket en TC2

La transferencia de datos del socket de red es un tipo especial de E/S, y un socket también es un descriptor de archivo. El socket también tiene una llamada de función Socket() similar a abrir un archivo. Esta función devuelve un descriptor de socket entero. El establecimiento de conexión posterior, la transmisión de datos y otras operaciones se implementan a través del socket.

A continuación se utiliza Socket para implementar la comunicación de socket de Windows C como ejemplo. Aquí pasamos una cadena al cliente y el servidor la recibe.

Lado del servidor

#include "stdafx.h"

#include

#include

#include

#define SERVER_PORT 5208 //escucha el puerto

void main()

{

WORD wVersionRequested;

WSADATA wsaData;

int ret, nLeft, length;

SOCKET sListen, sServer //Escucha; Socket, conecte el socket

struct sockaddr_in saServer, saClient; // Información de dirección

char *ptr // Puntero para recorrer la información.

//Inicialización de WinSock

wVersionRequested=MAKEWORD(2, 2); //Versión de la DLL de WinSock deseada

ret=WSAStartup(wVersionRequested, &wsaData );

if(ret!=0)

{

printf("WSAStartup() falló!\n");

return ;

}

//Crear un socket usando el protocolo TCP

sListen= socket( AF_INET , SOCK_STREAM, IPPROTO_TCP);

if (sListen == INVALID_SOCKET)

{

WSACleanup();

printf(" socket () faild! S_addr = htonl(INADDR_ANY); // Utilice INADDR_ANY para representar cualquier dirección

//bind

ret = bind(sListen, (struct sockaddr *)&saServer, sizeof (saServer));

if (ret == SOCKET_ERROR)

{

printf("bind() falló! Código: %d\n", WSAGetLastError());

closesocket(sListen); //cerrar el socket

WSACleanup();

Retorno;

}

ret = escuchar( sListen, 5);

if (ret == SOCKET_ERROR); )

{

printf("listen() faild!code:%d\n", WSAGetLastError());

closesocket( sListen /); / cerrar socket

return;

}

printf("¡Esperando que el cliente se conecte!\n");

printf(" Consejos: Ctrl+c para salir. \n");

// Bloqueo de espera para aceptar la conexión del cliente

while(1)// Bucle para escuchar al cliente y nunca parar, por eso en este proyecto no No tengo paquetes de latidos.

{

length = sizeof(saClient);

sServer = Accept(sListen, (struct sockaddr *)&saClient, &length);

if (sServer == INVALID_SOCKET)

{

printf("accept() faild!code:%d\n", WSAGetLastErr

or());

closesocket(sListen); //Cerrar el socket

WSACleanup();

return;

}

char recibirMessage[5000];

nLeft = sizeof(receiveMessage);

ptr = (char *)&.receiveMessage;

while(nLeft>0)

{

//Recibir datos

ret = recv(sServer, ptr, 5000, 0);

if (ret == SOCKET_ERROR)

{

printf("recv() falló!\n");

return;

}

if (ret == 0) // El cliente ha cerrado la conexión

{

printf("El cliente ha cerrado la conexión \ n");

break;

}

nLeft -= ret;

ptr += ret;

}

closesocket(sClient); //cerrar socket

WSACleanup();

return;

}

char sendMessage[]="¡hola, este es un mensaje del cliente!";

ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0); /p>

if (ret == SOCKET_ERROR)

{

printf("¡el envío() falló!\n");

}

else

printf("¡La información del cliente ha sido enviada!");

closesocket(sClient); //cierra el socket

WSACleanup();

}