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.
Conceptos básicos La virtualización permite que varias máquinas virtuales con diferentes sistemas
JFS fue desarrollado por IBM y apareció originalmente en el sistema operativo AIX, que proporciona u
Los sitios ligeramente más grandes tienen una carga equilibrada inevitablemente, pero el equilibri
Acerca de los comandos de apagado y reinicio de Linux. De hecho, el primer artículo debería escrib
Linux cliente SSHD solución confusa chino
Solución de error en el cuadro de diálogo chino de Linux
Preguntas frecuentes sobre la solución de escritorio virtual VMware View4.5
Win7 Explorer es un truco llamativo de iconos
Cómo crear sosreport en linux (RHEL 5.X /RHEL 6.X)
Configuración de la cuota de disco para la base de datos MySQL de Linux
El problema de ajuste de archivo de Linux
Trucos de ejecutor y descriptor de archivos de Linux
Cómo montar la carpeta debajo de windows a linux al configurar el entorno de desarrollo
El sistema Win10 tiene una solución de error de banda ancha 676
El micrófono Win7 no suena cómo configurar
Windows tiene un truco para evitar la intrusión ilegal.
La actualización de Windows 8.1 RT Actualización 3 se lanzará en septiembre
¿Qué debo hacer si el fondo del sistema Win8 se vuelve negro de repente?
Resuelva ideas para WirelessPad Y400 y Y500 en Win8
Cómo modificar la información personal en cortana en computadora win10