los pasos de desarrollo del programa TCP

TCP es un protocolo orientado a la conexión, las dos partes tienen que establecer primero una conexión de comunicación. Debido a las características fiables y estables de TCP, que se utiliza en la mayoría de las aplicaciones, pero sus necesidades de recursos relativamente alta del sistema.

Como se muestra en el proceso de desarrollo del procedimiento de servidor de protocolo de TCP es como sigue.

// inicializar la biblioteca de Winsock para la versión de protocolo
 // crear un objeto de servicio de socket (especifique el tipo de protocolo, dirección, información de la familia)
 // Enlazar zócalo (especificado IP, puerto unión a Socket)
 // empezar a escuchar, y establecer el número de oyentes . (después del inicio de la supervisión, el cliente puede conectarse correctamente)
 // abrir el puerto para recibir conexiones
 // enviar y recibir datos (utilizando el objeto Socket para establecer la conexión para la comunicación)
 // estrecha conexión de socket
 // terminación de la llamada biblioteca de Winsock

Desarrollar un programa de servidor TCP, la finalización de la biblioteca Winsock inicialización y crea un objetivo zócalo (socket) después de dos pasos generales, hay que realizar los siguientes pasos.

(1) se unen la toma de corriente a la dirección IP y el puerto especificados

Sin importar el protocolo al programa del lado del servidor de uso, deben unirse dirección IP y el puerto del servidor a la toma creado previamente, el programa cliente para comunicarse con él. Función de obligar a una toma de corriente que se unen, el siguiente prototipo.

int el bind ( 
 SOCKET S, // identificador de socket 
 const  struct la sockaddr FAR * nombre,     // la dirección a bind 
 int la namelen                          // longitud de dirección especificado por el nombre 
);

El primer parámetro s es un identificador de socket de obligar a la dirección devuelta por la función de socket.

El segundo parámetro es un puntero para nombrar sockaddr estructura, se utiliza para especificar la dirección de la toma de corriente está obligado.

Para el protocolo TCP, UDP, la dirección es normalmente una dirección IP y número de puerto para TCP, UDP sockaddr_in estructura en lugar de sockaddr. Que se define a continuación.

struct la sockaddr_in {
     Corto   el sin_family;       // (formato electrónico) Dirección de la familia, de Windows como AF_INET 
    u_short El sin_port;        // número de puerto 
    estructura in_addr sin_addr; // la dirección IP del 
    carbón   sin_zero de [ 8. ];      // valor de marcador de posición, por lo general 0 
};

El primer miembro de la misma sin_family socket af parámetros de función.

El segundo miembro de sin_port especifica el número de puerto en los servicios de comunicaciones TCP o UDP. La aplicación debe prestar atención a la hora de elegir un número de puerto, como por ejemplo 0 a 1023 por la IANA (Internet Assigned Numbers Authorith) gestión, reservado para un servicio público, la aplicación de usuario común debe seleccionar más de 1.024 el número de puerto. También nota, el valor que se utiliza aquí es el orden de bytes de red, y el número se almacena en el orden de bytes de red del ordenador. biblioteca Winsock proporciona un conjunto de funciones de conversión para convertir entre las dos secuencias, como se muestra a continuación.

los htons u_short (u_short hostshort); // el tipo u_short conversión orden de bytes por el host a la red de orden de bytes 
u_long htonl (u_long hostlong);     // el tipo u_long conversión orden de bytes por el anfitrión para el orden de bytes de red 
u_short ntohs (u_short netshort);   // el tipo u_short convierte de orden de bytes de red al anfitrión orden de bytes 
ntohl u_long (u_long netlong);      // el tipo u_long convertidos de orden de bytes de red a fin de bytes de ordenador

Por ejemplo, queremos utilizar el puerto 6000, entonces debería ser sin_port = htons (6000);

La tercera sin_addr miembro utilizado para almacenar la dirección IP, que se define como un tratamiento conjunto a todo el valor de 32 bits tal como se define a continuación.

struct in_addr { 
    union { 
        struct {s_b1 u_char, s_b2, s_b3, s_b4; S_un_b};
        struct {s_w1 u_short, s_w2; S_un_w}; 
        u_long S_addr; 
    } Dom;

Sabemos que la dirección IP se compone de cuatro partes, cada una separada por un punto, por lo general el formato "xxx.xxx.xxx.xxx". Una dirección IP es en realidad un datos de 32 bits, es decir, compuesto de cuatro bytes, cada byte de cada parte debe estar separado por puntos. Por lo tanto, el valor máximo de cada sección es 255. Si el uso directo de los miembros de esta asignación de cadena, por lo general necesitan para traducir, biblioteca Winsock proporciona las siguientes funciones de conversión.

sin firmar a largo inet_addr ( const  char   FAR * cp);
Char FAR * inet_ntoa ( struct   in_addr en );

En el que la función de acción es inet_addr valor de la dirección IP de 32 bits representado por el cambio de registro de cadena en orden de bytes de red.

inet_ntoa función de acción es la de convertir la representación de cadena de la dirección IP con la dirección IP en la red de orden de bytes de valor de 32 bits está representado.

La cuarta estructura sockaddr miembro sin_zero a mismo conjunto tamaño, ningún otro significado.

Función tiene éxito devuelve 0, en caso contrario devuelve SOCKET_ERROR, la función de uso WSAGetLastError para obtener el código de error.

(2) escuchar las conexiones

Cuando la toma de encuadernación especifica la dirección IP y número de puerto debe establecerse después de la toma de corriente en el estado de escucha, es decir, escuchar las conexiones de cliente. Uso escuchar prototipo de la función es la siguiente.

int el escuchar ( 
 SOCKET S,    // identificador de socket 
 int retraso   // escuchas número máximo de conexiones permitidas para permanecer en la cola no ha sido procesada 
);

En el caso de que el socket servidor en el estado de escucha, y la cola no está llena, la función de conexión de cliente se puede conectar con éxito, de lo contrario la función de manejo de la conexión del cliente se bloqueará hasta que la conexión se realiza correctamente o con tiempo excedido.

(3) acepta la solicitud de conexión

Cuando el socket del servidor en el estado de escucha, entonces se debe utilizar la aceptan función acepta la espera de conexión de la línea, si hay conexiones a la espera de volver inmediatamente a completar la conexión, introduzca o aceptar la función se bloqueará hasta la llegada de la conexión, o un objeto socket es Cerrar. aceptar prototipo de la función es la siguiente.

Aceptar enchufe ( 
SOCKET S, // identificador de socket 
struct la sockaddr FAR * addr, // puntero sockaddr_in estructura, el otro para recibir una dirección 
int FAR * addrlen      // addr puntero a tamaño de la memoria 
);

Esta función se toma en un socket conectado a un primer conexiones s sin procesar, a continuación, crear un nuevo socket y devuelve su identificador para el conector, transmisión y recepción de datos utilizando este nuevo puesto es para completar el zócalo.

proceso de desarrollo de programa cliente TCP figura es la siguiente.

// inicializar la biblioteca de Winsock para la versión de protocolo
 // crear un zócalo objeto de servicio (especifique el tipo de protocolo, dirección, información de la familia)
 // conexión (para conectar con el servidor especificado IP y puerto)
 // enviar y recibir datos (objeto del conector usando la conexión establecida será la comunicación)
 // estrecha conexión de socket
 // terminar las llamadas a la Winsock

En cuanto al desarrollo del programa de cliente TCP, la finalización de la biblioteca Winsock inicialización y crea un objetivo zócalo (socket) después de dos pasos generales, el siguiente paso es utilizar los iniciados función conectar una conexión con el servidor, el prototipo de la función es la siguiente.

int Connect (TOMA S,             // identificador de socket 
const  struct sockaddr FAR * nombre, // puntero sockaddr_in estructura, se especifica la dirección del servidor para conectar 
int la nameLen   // dir puntero al tamaño de la memoria 
);

Función tiene éxito devuelve 0, entonces s puede enviar y recibir datos a través de una toma de corriente. La función no puede devolver SOCKET_ERROR, la función de uso más WSAGetLastError obtener un código de error.

programa de servidor de protocolo o programa cliente ya sea TCP, los datos se envían utilizando el prototipo de función de envío es la siguiente.

int send(
 SOCKET s,               //已建立连接的套接字句柄
 const char FAR *buf,    //要发送的内容所在内存首地址
 int len,                //发送内容的长度
 int flags               //指定调用方式,通常置为0
);

函数执行成功后返回实际发送数据的字节数。

接收数据使用recv函数,原型如下。

int recv(
 SOCKET s,          //已建立连接的套接字句柄
 char FAR *buf,     //要接收的内容所在内存首地址
 int len,           //接收数据缓冲区的长度
 int flags          //指定调用方式,通常置为0
);

函数执行成功后返回实际接收数据的字节数。在阻塞模式下,recv将阻塞线程的执行,直至接收到数据。

Supongo que te gusta

Origin www.cnblogs.com/cyx-b/p/12535263.html
Recomendado
Clasificación