red informática --socket

Enchufe de Programación

la programación del zócalo - Application Programming Interface (API)

Interfaz de programación de la red

interfaz de programación de aplicaciones API (Application Programming Interface)

De programación de aplicaciones API de interfaz: es el control y el control del proceso de aplicación del sistema operativo será una interfaz de llamada al sistema de transición.

Alguna de las interfaces de programación de aplicaciones típicas :

  • Berkeley sistema operativo UNIX define una API, llamada interfaz de socket (interfaz de socket), que se refiere como un socket (socket).
  • sistema operativo Microsoft utiliza su interfaz con el API del conector, una forma ligeramente diferente de la API, y se llama interfaz de socket de Windows, WINSOCK.
  • AT & T UNIX System V para un API definido, abreviado como TLI (Transport Layer Interface)

Enchufe de programación -socket generales del API

  • Originalmente diseñado: para BSD UNIX-Berkley, para las interfaces de la pila de protocolos TCP / IP
  • Actualmente: estándar de facto de la industria, la gran mayoría de los sistemas operativos admiten
  • La interfaz de red de Internet más típica aplicación API
  • Modelo de comunicación: cliente / servidor (C / S)
  • Entre aplicaciones abstracción proceso de comunicación


Identificar puntos finales de comunicación (externos): número de puerto + dirección IP

Cómo operar el zócalo de la gestión del sistema / proceso (interno)? A: descriptor de socket (descriptor de socket), un pequeño número entero

abstracta socket

Al igual que en el archivo abstracta cuando el proceso de aplicación crea un socket, el sistema operativo asigna una estructura de datos para almacenar información sobre el zócalo, regresó descriptor de socket

estructura de direcciones

sockaddr_in estructura definida:

structsockaddr_in
{
    u_charsin_len;       /*地址长度*/
    u_charsin_family;    /*地址族(TCP/IP:AF_INET)*/
    u_shortsin_port;  /*端口号*/
    structin_addrsin_addr;/*IP地址*/
    char sin_zero[8]; /*未用(置0)*/
}

A través de TCP / IP conjunto de protocolos de declaración de aplicaciones de red variable de dirección de punto final, utilizando la estructura sockaddr_in

función de la API -socket programación de sockets

función API Socket (WinSock)

//WSAStartup
intWSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
//WSACleanup
intWSACleanup(void);

aplicación de uso del zócalo debe llamar primero la función WSAStartup antes de usar Socket

  • El primer parámetro indica la solicitud de la versión del programa de WinSock, en donde el byte alto indica la versión secundaria, el byte inferior indica la versión principal.
    • Hexadecimal número entero, por ejemplo 0x102 representa versión 2.1
  • El segundo argumento devuelve la información de versión del WinSock real
    • Estructura puntero WSADATA
//使用2.1版本的WinSock的程序代码段
wVersionRequested= MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData);

Al término de la aplicación utilizando la biblioteca pedir zócalo, y finalmente a la función WSACleanup llamada, los recursos de desvinculación y hembra del sistema de liberación biblioteca ocuparon Biblioteca Socket

sd= socket(protofamily,type,proto);

Crear un socket, el sistema operativo vuelve socket descriptor (SD), el primer parámetro (familia de protocolos): protofamily = PF_INET (TCP / IP), el segundo parámetro (tipo socket): type = SOCK_STREAM,SOCK_DGRAM orSOCK_RAW(TCP/IPla tercera parámetros (número de protocolo): 0 es el valor predeterminado

//创建一个流套接字的代码段
structprotoent*p;
p=getprotobyname("tcp");
SOCKET sd=socket(PF_INET,SOCK_STREAM,p->p_proto);

Tipo del zócalo orientada a servicios de TCP / IP

  • TCP: fiable, orientado a la conexión, la transmisión de flujo de bytes, punto
  • UDP: el transporte de datagramas no fiable, sin conexión

int closesocket(SOCKET sd);

Cerrar una sd descriptor de socket, si una pluralidad de procesos comparten un socket, el zócalo closesocket recuento de referencia por 1, se reduce a 0 no está cerrada, un proceso de una toma de multi-roscado sin utilizar el conteo, si un proceso de llamadas de rosca closesocket se apagará una toma de corriente, otros hilos en el proceso no será capaz de acceder a la toma, el valor de retorno: 0: éxito, SOCKET_ERROR: el fracaso

int bind(sd,localaddr,addrlen);

La unión de un extremo local dirección de socket: número de puerto + dirección IP

descriptor de socket (sd), dirección de punto final (el localaddr): Parámetro

Los clientes generalmente no tienen que llamar a la función bind

Servidor: número de puerto bien conocido, la dirección IP


int listen(sd,queuesize);

servidor de socket corriente lateral opuesto en estado de escucha, sólo las llamadas al servidor, solamente para toma de corriente orientado a la conexión

Configuración de un tamaño de solicitud de conexión de cola (QUEUESIZE)

Valor de retorno: 0: SOCKET_ERROR exitosa: Falló

connect(sd,saddr,saddrlen);

Llame a conectar el cliente al realizar la función de socket de cliente (SD) con un ordenador socket puerto específico en particular (el saddr) un (servicio) de conexión, sólo para el cliente, el cliente puede usar para el cliente TCP UDP también se pueden usar final, cliente TCP: establecer una conexión TCP, UDP cliente: especifica la dirección de punto final de servidor

newsock= accept(sd,caddr,caddrlen);

llamada a la función programa de servicio aceptar una cola de conexiones fue tomada en la parte superior de la solicitud del cliente desde un cliente solicita una toma de corriente en un sd estado de escucha, y crea un nuevo socket para crear un canal de conexión de socket con el cliente, sólo se al socket TCP, sólo para el servidor

El uso de las tomas de nueva creación (newsock) para comunicarse con los clientes

send(sd,*buf,len,flags);

Socket TCP función de envío (cliente y servidor), o llame a la función de conexión de socket de cliente UDP

sendto(sd,*buf,len,flags,destaddr,addrlen);

la función sendto para el socket del servidor UDP y conectar la función no se llama socket de cliente UDP

recv(sd,*buffer,len,flags);

servidor de UDP recibe función recv socket de cliente recibe los datos desde el otro extremo de la conexión TCP, o de una llamada a la función de conexión de datos enviados por

recvfrom(sd,*buf,len,flags,senderaddr,saddrlen);

terminal de la función recvfrom para recibir datos del socket UDP con el servidor no llama socket de cliente UDP función de conexión

int setsockopt(intsd, intlevel, intoptname, *optval, intoptlen);

función setsockopt () se utiliza para ajustar el parámetro de opción de la sd socket

int getsockopt(intsd, intlevel, intoptname, *optval, socklen_t*optlen);

una función getsockopt () se utiliza para obtener cualquier tipo, cualquier estado del valor actual de los zócalos de opción, y almacena el resultado optval

WSAStartup: inicializar la biblioteca socket (sólo WinSock)
WSACleanup: claro / interrumpir el uso de la biblioteca socket (sólo WinSock)
socket: crear connect socket: "Conectar" servidor remoto (sólo cliente)
closesocket: liberación / Cierre la toma bind: enlazar un socket local dirección IP y número de puerto (por lo general el cliente no lo hace)
la escucha: toma de servidor TCP lado opuesto está el modo de escucha, y establecer el tamaño de la cola (sólo servidor TCP socket)
aceptar: aceptar / extracción de una solicitud de conexión, se crea un nuevo socket, el nuevo socket (sólo para socket TCP del lado del servidor)
la recv: recibir datos (un socket de cliente TCP o modo conectado la toma de UDP)
recvfrom: recibir paquetes de datos (UDP socket utilizado para el modo no conectado)
enviar: envía datos (socket TCP para el cliente o el UDP socket modo conectado)
el sendto: el envío de paquetes de datos (UDP socket utilizado para el modo no conectado)
el setsockopt: juego de parámetros de opción de socket
getsockopt: Get socket opción de parámetros

orden de bytes de red

TCP / IP define una representación estándar entero binario de una cabecera de protocolo: orden de bytes de red (orden de bytes de red), algunos parámetros de la función API Socket necesita ser almacenado en orden de bytes de red (como la dirección IP, número de puerto, etc.)

orden de bytes nativo puede lograrse entre la función de conversión de orden de bytes de red

htons: orden de bytes nativo → orden de bytes de red (16bits)
ntohs: orden de bytes de orden de bytes de red → local (16bits)
htonl: orden de bytes nativo → orden de bytes de red (32 bits)
ntohl: orden de bytes de red local → orden de bytes (32 bits)

Las aplicaciones de red de socket API (TCP) para llamar flujo básico

La programación del zócalo - el diseño de software de cliente

Resolver la dirección IP del servidor

El cliente puede utilizar el nombre de dominio (por ejemplo .: study.163.com) o la dirección IP (por ejemplo: 123.58.180.121) identifica el servidor, utilizando el protocolo IP requiere un 32 bit de dirección IP binaria, es necesario convertir el nombre de dominio o la dirección IP es una dirección IP de 32 bits

La función inet_addr () salpicado-decimal dirección IP a la conversión de direcciones IP 32

gethostbyname () la función de dominio para lograr la conversión de direcciones IP 32, devuelve un puntero a una estructura hostent puntero

servidor de resolución (conocida) número de puerto

El cliente también puede usar el nombre del servicio (por ejemplo, HTTP) identificador de puerto de servidor, las necesidades de nombre de servicio que ser convertido a número de puerto bien conocido, la función getservbyname () devuelve un puntero a una estructura servent puntero

Protocolo de Resolución Nº

El cliente puede utilizar el nombre del protocolo (por ejemplo: el TCP) especificar el protocolo, las necesidades de protocolo para ser convertidos en protocolo de resolución de nombre (por ejemplo: 6), con función getprotobyname () implementan el protocolo número de protocolo de conversión de nombre, devuelve un puntero a una protoent estructura puntero

Proceso de Software de cliente TCP

1. Determinar la dirección IP del servidor y número de puerto

2. Crear un socket

3. Dirección de extremo local Asignar (dirección IP + número de puerto)

4. servidor de Connect (socket)

5. Seguir el protocolo de capa de aplicación para la comunicación

6. Cerrar la conexión / liberable

Proceso de Software de cliente UDP

1. Determinar la dirección IP del servidor y número de puerto

2. Crear un socket

3. Dirección de extremo local Asignar (dirección IP + número de puerto)

4. Especificar la dirección de punto final de servidor, la estructura de datagramas UDP

5. Seguir el protocolo de capa de aplicación para la comunicación

6. Cierre / liberación de la toma

la programación del zócalo - Diseño de software de servidor

4 tipos de servidor básica

  • No bucle de conexión del servidor (sin conexión iterativo)
  • servidor (orientado a conexión iterativo) orientado a la conexión Loop
  • No hay conexiones simultáneas servidor (sin conexión concurrente)
  • Concurrente orientado a la conexión (orientado a la conexión concurrente) tipos básicos de servidor de los servidores 4

servidor sin conexión bucle de flujo básico

1. Crear un socket

2. dirección de punto final Binding (INADDR_ANY + número de puerto)

3 recibe repetidamente una solicitud de un cliente

4. Siga el mensaje de respuesta de configuración del protocolo de capa de aplicación transmite al cliente

Transmisión de datos:

El servidor no puede utilizar la función connect (), el servidor sin conexión mediante la función sendto () para enviar paquetes de datos

El acceso a la dirección de punto final al cliente: Función recvfrom de llamadas () cuando se reciben datos, el extracto de forma automática

servidor orientado a la conexión procesa el ciclo básico

1. Crear un socket (principal), se unen y el número de puerto conocido;

2. Establecer el modo de socket de escucha (principal) pasiva, listo para el servidor;

3. La aceptación de llamada () toma la siguiente petición de conexión (a través de la toma de corriente principal), crea un nuevo socket para establecer una conexión con el cliente;

4. Seguir el protocolo de capa de aplicación, el cliente recibe la solicitud repetidos, construcciones y envía una respuesta (a través del nuevo socket);

5. Después de servicio para un cliente particular, cierra la conexión entre el cliente y vuelve a la etapa 3. El servidor orientado a la conexión de bucle procesa la básica

básica del servidor sin conexión simultánea flujo

El hilo principal 1: crear un socket, se unen y el número de puerto conocido;

El hilo principal 2: llama repetidamente recvfrom () para recibir la siguiente petición del cliente, y crea un nuevo hilo en respuesta al proceso del cliente;

1 hilo hijo: recibir una solicitud en particular;

hilo Child 2: De acuerdo con el mensaje de respuesta de configuración del protocolo de capa de aplicación, y pide la transmisión sendto ();

hilo Niño 3: Exit (un sub-hilo procesar una solicitud después de la terminación)

los procesos del servidor orientadas a la conexión concurrentes el básicas

El hilo principal 1: Crear el zócalo (principal), se unen y el número de puerto conocido;

El hilo principal 2: Conjunto modo de escucha socket pasivo (principal), listo para el servidor;

El hilo principal 3: en repetidas ocasiones de aceptación de llamada () toma la siguiente petición de conexión (a través de la toma de corriente principal), y crea un nuevo hilo hijo en respuesta al proceso del cliente;

hilo 1 niño: la recepción de una solicitud de servicio al cliente (por el socket creado recientemente);

hilo Child 2: Siguiendo el protocolo de capa de aplicación para interactuar con un cliente en particular;

hilo hijo 3: Desactivar / liberar la conexión y la salida (la terminación de subprocesos)

ejemplo

DÍA ciclo de servidor sin conexión

servidores orientados a conexión simultáneamente DAYTIME

Supongo que te gusta

Origin www.cnblogs.com/ygjzs/p/12422107.html
Recomendado
Clasificación