Socket wird auch „Socket“ genannt. Anwendungen senden normalerweise Anfragen an das Netzwerk oder antworten auf Netzwerkanfragen über „Socket“, sodass Hosts oder Prozesse auf einem Computer kommunizieren können.
In diesem Kapitel zeigen wir Ihnen, wie Sie den Socket-Dienst in der Perl-Sprache verwenden.
Verwenden Sie die Socket- Funktion, um einen Socket-Dienst zu erstellen.
Verwenden Sie die Bindefunktion , um den Port zu binden.
Verwenden Sie die Listen- Funktion, um den Port abzuhören.
Verwenden Sie die Accept -Funktion, um Clientanfragen zu empfangen.
Verwenden Sie die Socket- Funktion, um einen Socket-Dienst zu erstellen.
Verwenden Sie die Verbindungsfunktion , um eine Verbindung zum Socket-Server herzustellen.
Das folgende Diagramm veranschaulicht den Kommunikationsprozess zwischen Client und Server:
In Perl verwenden wir die Funktion socket(), um einen Socket zu erstellen. Das Syntaxformat ist wie folgt:
socket(SOCKET, DOMAIN, TYPE, PROTOCOL);
Parameteranalyse:
Der von DOMAIN erstellte Socket gibt den Protokollsatz an. Zum Beispiel:
AF_INET
repräsentiert das IPv4-Netzwerkprotokoll
AF_INET6
bedeutet IPv6
AF_UNIX
bedeutet lokaler Socket (unter Verwendung einer Datei)
TYPE Socket-Typen können als SOCK_STREAM oder SOCK_DGRAM klassifiziert werden, je nachdem, ob sie verbindungsorientiert oder nicht verbindungsorientiert sind
PROTOKOLL sollte (getprotobyname('tcp'))[2] sein. Gibt das tatsächlich verwendete Transportprotokoll an.
Die Aufrufmethode der Socket-Funktion lautet also wie folgt:
use Socket # Definieren Sie PF_INET und SOCK_STREAMsocket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);
Verwenden Sie bind(), um dem Socket eine Adresse zuzuweisen:
bind( SOCKET, ADRESSE );
SOCKET Ein Socket-Deskriptor. ADDRESS ist die Socket-Adresse (TCP/IP), die drei Elemente enthält:
Adresscluster (TCP/IP, ist AF_INET, wahrscheinlich 2 auf Ihrem System)
Portnummer (z. B. 21)
Netzwerkadresse (z. B. 10.12.12.168)
Nachdem ein Socket mit socket() erstellt wurde, wird ihm nur das verwendete Protokoll und keine Adresse zugewiesen. Bevor Verbindungen von anderen Hosts akzeptiert werden, muss bind() aufgerufen werden, um dem Socket eine Adresse zuzuweisen.
Ein einfaches Beispiel ist wie folgt:
use Socket # PF_INET und SOCK_STREAM sind definiert $port = 12345; # Listening port $server_ip_address = "10.12.12.168";bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) or die „Port kann nicht gebunden werden! N";
oder die wird ausgeführt, nachdem die Adresse nicht gebunden werden konnte.
Das Festlegen des Ports kann sofort wiederverwendet werden, indem die Setsockopt()-Option SO_REUSEADDR gesetzt wird.
Die Funktion pack_sockaddr_in() wandelt die Adresse in ein Binärformat um.
Nachdem der Socket an eine Adresse gebunden ist, beginnt die Funktion listen(), auf mögliche Verbindungsanfragen zu warten. Dies kann jedoch nur genutzt werden, wenn ein zuverlässiger Datenfluss gewährleistet ist:
listen(SOCKET, QUEUESIZE);
SOCKET: Ein Socket-Deskriptor.
QUEUESIZE: Dies ist eine Ganzzahl, die die Größe der Abhörwarteschlange bestimmt. Wenn eine Verbindungsanforderung von Accept() angenommen wird, wird sie aus der Abhörwarteschlange entfernt Warteschlange ist voll, eine neue Verbindung Die Anfrage gibt einen Fehler zurück.
Sobald die Verbindung akzeptiert wurde, wird bei Erfolg 0 und bei Fehler -1 zurückgegeben.
Die Funktion „accept()“ akzeptiert die angeforderte Socket-Verbindung. Gibt bei Erfolg die komprimierte Form der Netzwerkadresse zurück, andernfalls wird FALSE zurückgegeben:
akzeptieren( NEW_SOCKET, SOCKET );
NEW_SOCKET: Ein Socket-Deskriptor.
SOCKET: Ein Socket-Deskriptor.
Accept() wird normalerweise in Endlosschleifen verwendet:
while(1) { Accept( NEW_SOCKET, SOCKT ); .....}
Das obige Beispiel kann Clientanfragen in Echtzeit überwachen.
Der Systemaufruf connect() stellt eine Verbindung für einen Socket her. Die Parameter sind ein Dateideskriptor und eine Hostadresse.
connect(SOCKET, ADRESSE);
Im Folgenden wird eine Instanz erstellt, die mit dem Server-Socket verbunden ist:
$port = 21; # ftp port $server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) or die "Port kann nicht gebunden werden! n";
Als nächstes verwenden wir ein vollständiges Beispiel, um die Anwendung aller Socket-Funktionen zu verstehen:
Server server.pl-Code:
Öffnen Sie ein Terminal und führen Sie den folgenden Code aus:
$ perl sever.pl Zugriffsstart: 7890
Client client.pl-Code:
Öffnen Sie ein anderes Terminal und führen Sie den folgenden Code aus:
$ perl client.plIch bin die Informationen vom Server