El socket también se denomina "socket". Las aplicaciones generalmente envían solicitudes a la red o responden a solicitudes de red a través de "socket", para que los hosts o procesos en una computadora puedan comunicarse.
En este capítulo, le enseñaremos cómo utilizar el servicio Socket en el lenguaje Perl.
Utilice la función de socket para crear un servicio de socket.
Utilice la función de vinculación para vincular el puerto.
Utilice la función de escucha para escuchar el puerto.
Utilice la función de aceptación para recibir solicitudes de clientes.
Utilice la función de socket para crear un servicio de socket.
Utilice la función de conexión para conectarse al servidor de socket.
El siguiente diagrama demuestra el proceso de comunicación entre el cliente y el servidor:
En Perl, usamos la función socket() para crear un socket. El formato de sintaxis es el siguiente:
socket(ENCHUFE, DOMINIO, TIPO, PROTOCOLO);
Análisis de parámetros:
El socket creado por DOMAIN especifica el protocolo establecido. Por ejemplo:
AF_INET
representa el protocolo de red IPv4
AF_INET6
significa IPv6
AF_UNIX
significa socket local (usando un archivo)
TIPO Los tipos de socket se pueden clasificar como SOCK_STREAM o SOCK_DGRAM dependiendo de si están orientados a la conexión o no.
PROTOCOLO debe ser (getprotobyname('tcp'))[2] . Especifica el protocolo de transporte real utilizado.
Entonces, el método de llamada a la función de socket es el siguiente:
use Socket # Defina PF_INET y SOCK_STREAMsocket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
Utilice bind() para asignar una dirección al socket:
enlazar( ENCHUFE, DIRECCIÓN );
SOCKET Un descriptor de socket. DIRECCIÓN es la dirección del socket (TCP/IP) que contiene tres elementos:
Clúster de direcciones (TCP/IP, es AF_INET, probablemente 2 en su sistema)
Número de puerto (por ejemplo, 21)
Dirección de red (por ejemplo, 10.12.12.168)
Después de crear un socket usando socket(), solo se le proporciona el protocolo utilizado y no se le asigna ninguna dirección. Antes de aceptar conexiones de otros hosts, se debe llamar a bind() para asignar una dirección al socket.
Un ejemplo sencillo es el siguiente:
use Socket # PF_INET y SOCK_STREAM están definidos $port = 12345 # Puerto de escucha $server_ip_address = "10.12.12.168";bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) o muere "¡No se puede vincular el puerto! norte";
o morir se ejecuta después de no poder vincular la dirección.
La configuración del puerto se puede reutilizar inmediatamente configurando la opción setsockopt() SO_REUSEADDR.
La función pack_sockaddr_in() convierte la dirección a formato binario.
Después de que el socket esté vinculado a una dirección, la función listen() comenzará a escuchar posibles solicitudes de conexión. Sin embargo, esto sólo se puede utilizar cuando se garantiza un flujo de datos fiable:
escuchar(SOCKET, QUEUESIZE);
SOCKET: un descriptor de socket.
QUEUESIZE: Es un número entero que determina el tamaño de la cola de escucha. Cuando llega una solicitud de conexión, ingresará a la cola de escucha; cuando acepte una solicitud de conexión, se eliminará de la cola de escucha; la cola está llena, una nueva conexión La solicitud devolverá un error.
Una vez aceptada la conexión, se devuelve 0 en caso de éxito y -1 en caso de error.
La función aceptar() acepta la conexión de socket solicitada. Devuelve la forma comprimida de la dirección de red si tiene éxito; de lo contrario, devuelve FALSO:
aceptar( NEW_SOCKET, SOCKET );
NEW_SOCKET: un descriptor de socket.
SOCKET: un descriptor de socket.
aceptar() se usa generalmente en bucles infinitos:
mientras(1) { aceptar( NEW_SOCKET, SOCKT .....}
El ejemplo anterior puede monitorear las solicitudes de los clientes en tiempo real.
La llamada al sistema connect() configura una conexión para un socket. Los parámetros son un descriptor de archivo y una dirección de host.
conectar(ENCHUFE, DIRECCIÓN);
Lo siguiente crea una instancia conectada al socket del servidor:
$puerto = 21; # puerto ftp $server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) o die "¡No se puede vincular el puerto! n";
A continuación, utilizamos un ejemplo completo para comprender la aplicación de todas las funciones de socket:
Código del servidor server.pl:
Abra una terminal y ejecute el siguiente código:
$ perl sever.pl inicio de acceso: 7890
Código client.pl del cliente:
Abra otra terminal y ejecute el siguiente código:
$ perl client.plSoy la información del servidor