Tutorial básico de entrada a la programación en red Unix

  
 

Unix es uno de los principales sistemas operativos utilizados por las computadoras. TCP /IP es un protocolo de Internet muy utilizado. Unix proporciona un mecanismo de comunicación de procesos de red para la programación de redes TCP /IP: sockets. Interfaz (Interfaz Sockets). Este artículo presentará los conceptos básicos y las técnicas de programación de sockets en el entorno Un ix, y utilizará ejemplos para ilustrar cómo implementar la comunicación cliente /servidor con sockets bajo Unix. 1. Introducción a Socket Socket (Socket) es la unidad operativa básica de la comunicación de red. Proporciona puntos finales para la comunicación bidireccional entre diferentes hosts. Estos procesos establecen un Socket antes de la comunicación y leen /escriben en Socket. La operación implementa la función de comunicación de red. Los enchufes se dividen en los siguientes tres tipos. 1. Byte Stream Socket Este es el tipo de socket más utilizado. El protocolo TCP (Protocolo de control de transporte) en el conjunto de protocolos TCP /IP utiliza este tipo de interfaz, que proporciona conexión (establece circuitos virtuales) y está libre de errores. Transmisión de paquetes de red con orden de transmisión constante, longitud de paquete ilimitada y no repetición. 2. Socket de datagrama El protocolo UDP (Protocolo de datagrama de usuario) en el conjunto de protocolos TCP /IP usa dicha interfaz. Es un servicio sin conexión que realiza la transmisión de red con envolventes independientes. La longitud máxima del sobre es de 32 KB. La secuencia, la confiabilidad y la no repetibilidad no están garantizadas y, por lo general, se usan para la transmisión de mensajes individuales o cuando la confiabilidad no es importante. 3. El zócalo de datagrama original proporciona acceso directo al protocolo de comunicación subyacente (como el protocolo IP) de la red. Generalmente no se proporciona a los usuarios normales y se usa principalmente para desarrollar nuevos protocolos o extraer características que están más ocultas. En segundo lugar, el programa de llamadas al sistema socket es una descripción simple de la llamada al sistema socket en Unix. Programación 3, método de programación de socket Aquí presentaremos el método de programación del socket de byte-flow y el socket de datagramas sin protocolo de conexión para el protocolo de conexión, porque el socket de datagrama original se usa en el trabajo real. Menos, no hay discusión aquí. Independientemente de la programación de socket, se emplea el modo de colaboración cliente /servidor, es decir, el proceso del cliente emite una solicitud al proceso del servidor, y el proceso del servidor ejecuta la tarea solicitada y devuelve el resultado al proceso del cliente. El proceso de servicio del socket de flujo de bytes y el proceso del cliente deben establecer una conexión antes de comunicarse. Los pasos para establecer una conexión y comunicación se muestran en la Figura 1. 1. El proceso de servicio primero llama a Socket () para crear un socket de flujo de bytes, y llama a bind () para vincular la dirección del servidor al socket, y luego llama a listen () para escuchar. La solicitud de conexión, luego llame a accept () para prepararse para establecer una conexión con el proceso del cliente. Cuando no hay solicitud de conexión, el proceso de servicio se bloquea. 2. El proceso del cliente llama a Socket () para crear un socket de flujo de bytes, y luego llama connect () a El proceso de servicio emite una solicitud de conexión. 3. Cuando llega la solicitud de conexión, el proceso de servicio se activa, se genera un nuevo socket de flujo de bytes, y el nuevo socket se usa para establecer una conexión con el socket del proceso del cliente, y el proceso de servicio se genera primero. El socket continúa usándose para escuchar las solicitudes de servicio en la red. 4. El proceso de servicio y el proceso del cliente intercambian datos llamando a read () y write (); 5. El proceso de servicio y el proceso del cliente deshacen el socket llamando a close () y Interrumpir la conexión. Figura 1 Sistema de conexión de byte-stream para el protocolo de conexión Figura 2 Proceso de conexión de datos de la conexión de datos de conexión del sistema sin conexión. El proceso del cliente no necesita establecer una conexión antes de la comunicación. Los pasos de comunicación se muestran en la Figura 2. 1. El proceso de servicio primero llama a Socket () para crear un socket de datos, y llama a bind () para enlazar la dirección del servidor al socket, y luego llama a recvfrom () para esperar la solicitud enviada por el proceso del cliente. 2. El proceso del cliente está llamando al Socket.
() Después de crear un socket de datagrama, llame a bind () para vincular la dirección del cliente al socket, luego llame a sendto () para enviar la solicitud al proceso de servicio, y luego llame a recvfrom () para esperar que el proceso de servicio devuelva la solicitud. Procesando el resultado; 3. Después de ejecutar la tarea solicitada por el proceso del cliente, el proceso de servicio llama a sendto () para devolver el resultado del proceso al proceso del cliente 4. El proceso de servicio y el proceso del cliente revocan el socket llamando a close (). IV. Ejemplo de programación de sockets A continuación se muestra un ejemplo de implementación de una comunicación de proceso en modo cliente /servidor a través de una red TCP /IP utilizando un socket de flujo de bytes. En este ejemplo, el proceso de servicio se ejecuta antes que el proceso del cliente. Cuando las dos partes establecen una conexión, el proceso de servicio envía continuamente un número de secuencia que aumenta continuamente al proceso del cliente a través de la conexión. El proceso del cliente se muestra en la pantalla cada vez que recibe 50 números de secuencia. An ‘. ', después de que se muestren 20 puntos, y la línea se modifique hasta que se interrumpa cualquiera de los procesos. /******server.c******/# incluir < sys /types.h > # incluyen < sys /socket.h > # incluyen < netinet /in.h > # < incluyen; netdb.h > # include < stdio.h > main () {int calcetín, nameLen, SEC, netint; struct sockaddr-en servidor; //guardar la dirección de Internet del servidor de Char msgsock; charla buf [1024]; //byte crear un protocolo TCP socket de flujo calcetín dominio de Internet = socket (AF-INET, calcetín-stream, IPPROTO-TCP), si (calcetín < 0) {perror (" socket "); de salida (1); } //Agrupe la dirección del host local (servidor) en el socket creado server.sinfamily = AF-INET; //dominio de Internet sevrer.sinaddr.s-addr = INADDR-ANY; //Use cualquier dirección legal sevrer .sinport = htons (1032); //número de puerto de servicio reconocido si (bind (calcetín, &servidor, sizeof (servidor)) < 0) {perror (" se unen "); de salida (2);} //Cree una cola de escucha de longitud 5, escuche la solicitud de conexión desde el socket if (listen (sock, 5) < 0) {perror (" listen "); exit (3)} //bloque al cliente La solicitud de conexión llega, creando un nuevo socket para la comunicación namelen = sizeof (server); if ((msgsock = accept (sock, &server, &namelen) ) < 0) {perror (" accept "); exit (4);} //En este punto se ha establecido la conexión, la comunicación seq = 0; para (;;) {netint = htonl (seq); //El orden de bytes del host se convierte en la escritura de orden de bytes de la red (msgsock, &netint, 4); //escribe el número de secuencia en el cliente seq ++;}} /****** client.c ****** /# include < sys /types.h > # incluyen < sys /socket.h > # incluyen < netinet /in.h > # incluyen < netdb.h > # include < stdio.h > principal (argc, argv) int argc, char * argv []; {int calcetín, myseq, recvseq; struct sockaddr en el servidor; //guardar servidor de Internet dirección de estructura hostcnt * h; información almacenada ////host parámetros de línea de comandos se deben seguir: el nombre de host del servidor, que debe ser definido en //archivo de host /etc /hosts, por ejemplo: //192.7.100.31 hp486if (! argc = 2) {printf (" Uso:% s ServerName \\ n ", argv [0 ]; de salida (1);} //crear el dominio de Protocolo de Internet TCP socket flujo de bytes calcetín = socket (AF-INET, calcetín-stream, IPPROTO-TCP), si (calcetín < 0) {perror (" socket "); de salida (2);!} //el argumento de nombre de línea de comandos de host del servidor adquiere la dirección del servidor if ((h = gethostbyname (argv [1]))) {perror (argv [1]; ex Se (3);} bzero (&servidor, sizeof (servidor)); //Primero borra la dirección del servidor 0server.sinfamily = AF-INET; //dominio de Internet //ingrese la dirección del host en la dirección del servidor bcopy (h- > h-addr, &server.sinaddr, h- > longitud); server.sinport = htons (1032); //llenar un número de puerto de servicio reconocido para establecer una conexión con el proceso de servicio si (conectar ( calcetín, &servidor, sizeof (servidor)) < 0) {perror (" conectar "); de salida (4);} //En este momento, se establece la conexión, a través de la lectura de la toma /escritura lograr comunicación myseq = 0; while (leer (calcetín, &recvseq, 4) == 4) {//número de secuencia leído recvseq = ntohl (recvseq); //red orden de bytes de orden de bytes de ordenador conversión si (myseq! = recvseq) {printf (" tantes =% d quería =% d \\ n ", recvseq, myseq); myseq = recvseq;} elsemyseq ++; if ((recvseq% 50!)) printf (". "); If (! (Recvseq% 1000)) printf (" \\ n ");}} V. Conclusión Aunque Sockets se propuso por primera vez como una especificación BSD, se ha convertido en un TCP /IP bajo el sistema operativo Unix
Estándares de programación de red, pero con el continuo avance de la tecnología de red, el ámbito de aplicación de Sockets ya no se limita al sistema operativo Unix
y Red TCP /I P. Actualmente, Windows
, Windows
NT, Windows
95, OS /2, Sun OS, Netware y muchos otros sistemas operativos
están disponibles Las interfaces de socket, que se basan en 4.3BSD Unix Sockets y agregan algunas extensiones a sus propias características de sistema operativo. Estas nuevas versiones de Sockets están incorporadas o se conectan a OS
El formulario se proporciona al programador. W insock ( Windows
Sockets) es una versión de Sockets para la serie de sistemas operativos Windows
. Al mismo tiempo, el tipo de protocolos de red soportados por los zócalos están aumentando, por ejemplo, Winsock no sólo es compatible con el protocolo TCP /UDP, pero también es compatible con IPX /SP X, AppleTalk, Decnet, protocolos de red NetBEUI, socket Netware soporta TCP /UDP Y el protocolo IPX /SPX. Además, los sockets han agregado soporte de lenguaje no C: C ++, BASIC, Pascal, etc. Se puede ver que el rendimiento abierto de Sockets está mejorando gradualmente, y se puede decir que se ha convertido en una interfaz universal para la programación en red. Con esta poderosa herramienta, podemos construir cualquier sistema de procesamiento distribuido a través de sistemas operativos y protocolos de red.

Copyright © Conocimiento de Windows All Rights Reserved