Socket est également appelé « socket ». Les applications envoient généralement des requêtes au réseau ou répondent aux requêtes du réseau via un « socket », afin que les hôtes ou les processus d'un ordinateur puissent communiquer.
Dans ce chapitre, nous allons vous apprendre à utiliser le service Socket en langage Perl.
Utilisez la fonction socket pour créer un service socket.
Utilisez la fonction bind pour lier le port.
Utilisez la fonction d'écoute pour écouter le port.
Utilisez la fonction d'acceptation pour recevoir les demandes des clients.
Utilisez la fonction socket pour créer un service socket.
Utilisez la fonction connect pour vous connecter au serveur socket.
Le diagramme suivant illustre le processus de communication entre le client et le serveur :

En Perl, nous utilisons la fonction socket() pour créer une socket. Le format de syntaxe est le suivant :
socket(SOCKET, DOMAINE, TYPE, PROTOCOLE);
Analyse des paramètres :
Le socket créé par DOMAIN spécifie l'ensemble de protocoles. Par exemple:
AF_INET représente le protocole réseau IPv4
AF_INET6 signifie IPv6
AF_UNIX signifie socket local (utilisant un fichier)
TYPE Les types de socket peuvent être classés comme SOCK_STREAM ou SOCK_DGRAM selon qu'ils sont orientés connexion ou non-connexion.
PROTOCOLE devrait être (getprotobyname('tcp'))[2] . Spécifie le protocole de transport réel utilisé.
La méthode d’appel de la fonction socket est donc la suivante :
utiliser Socket # Définir PF_INET et SOCK_STREAMsocket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);Utilisez bind() pour attribuer une adresse au socket :
bind( PRISE, ADRESSE );
SOCKET Un descripteur de socket. ADDRESS est l'adresse du socket (TCP/IP) contenant trois éléments :
Cluster d'adresses (TCP/IP, est AF_INET, probablement 2 sur votre système)
Numéro de port (par exemple 21)
Adresse réseau (par exemple 10.12.12.168)
Une fois qu'un socket est créé à l'aide de socket(), seul le protocole utilisé lui est donné et aucune adresse n'est attribuée. Avant d'accepter les connexions d'autres hôtes, bind() doit être appelé pour attribuer une adresse au socket.
Un exemple simple est le suivant :
use Socket # PF_INET et SOCK_STREAM sont définis $port = 12345; # Port d'écoute $server_ip_address = "10.12.12.168";bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) ou mourir "Impossible de lier le port ! n";
ou die est exécuté après l'échec de la liaison de l'adresse.
La définition du port peut être immédiatement réutilisée en définissant l'option setsockopt() SO_REUSEADDR.
La fonction pack_sockaddr_in() convertit l'adresse au format binaire.
Une fois le socket lié à une adresse, la fonction Listen() commencera à écouter d'éventuelles demandes de connexion. Toutefois, cela ne peut être utilisé que si un flux de données fiable est garanti :
écouter(SOCKET, QUEUESIZE);
SOCKET : un descripteur de socket.
QUEUESIZE : C'est un entier qui détermine la taille de la file d'attente d'écoute. Lorsqu'une demande de connexion arrive, elle entrera dans la file d'attente d'écoute ; lorsqu'une demande de connexion est acceptée par accept(), elle sera supprimée de la file d'attente d'écoute ; la file d'attente est pleine, une nouvelle connexion La requête renverra une erreur.
Une fois la connexion acceptée, 0 est renvoyé en cas de succès et -1 en cas d'erreur.
La fonction accept() accepte la connexion socket demandée. Renvoie la forme compressée de l'adresse réseau en cas de succès, sinon renvoie FALSE :
accepter( NEW_SOCKET, SOCKET );
NEW_SOCKET : un descripteur de socket.
SOCKET : un descripteur de socket.
accept() est généralement utilisé dans des boucles infinies :
while(1) { accepter( NEW_SOCKET, SOCKT .....}L'exemple ci-dessus peut surveiller les demandes des clients en temps réel.
L'appel système connect() établit une connexion pour un socket. Les paramètres sont un descripteur de fichier et une adresse d'hôte.
connecter(PRISE, ADRESSE);
Ce qui suit crée une instance connectée au socket du serveur :
$port = 21; # port ftp $server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) ou die "Impossible de lier le port ! n";
Ensuite, nous utilisons un exemple complet pour comprendre l'application de toutes les fonctions de socket :
Code serveur server.pl :
Ouvrez un terminal et exécutez le code suivant :
$ perl sever.pl accès début : 7890
Code client client.pl :
Ouvrez un autre terminal et exécutez le code suivant :
$ perl client.plJe suis les informations du serveur