In PHP können wir mit Socket -Erweiterungen die Netzwerkkommunikationsfunktionen sehr flexibel implementieren und sogar einen grundlegenden Netzwerkserver erstellen. Dieser Artikel konzentriert sich auf die Verwendung von Socket_Listen () und Socket_accept () , um einen einfachen TCP -Server zu erstellen.
socket_listen ()
Diese Funktion wird verwendet, um eine Socket -Ressource mit einer IP und einem Port anzuhören und auf die Client -Verbindungsanforderung zu warten.
socket_accept ()
Diese Funktion wird verwendet, um eine eingehende Client -Verbindungsanforderung zu akzeptieren und eine neue Socket -Ressource für die Kommunikation mit dem Kunden zurückzugeben.
Erstellen Sie Socket Resource ( Socket_Create )
Binden Sie IP und Port ( Socket_Bind )
Port anhören ( Socket_Listen )
Clientverbindungen Schleifen und Akzeptieren ( Socket_accept )
Lesen und Schreiben von Daten und vollständige Kommunikation
Client- und Server -Sockeln schließen
<?php
// erstellenTCP socket(AF_INETProtokollfamilie,Streaming)
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
die("socket_create() scheitern: " . socket_strerror(socket_last_error()) . "\n");
}
// BindenIPund Ports
$address = '0.0.0.0'; // Hören Sie sich alle Netzwerkschnittstellen an
$port = 8080;
if (!socket_bind($server, $address, $port)) {
die("socket_bind() scheitern: " . socket_strerror(socket_last_error($server)) . "\n");
}
// Beginnen Sie mit der Überwachung,Die Warteschlangenlänge, die das Warten auf die Verbindung ermöglicht, ist5
if (!socket_listen($server, 5)) {
die("socket_listen() scheitern: " . socket_strerror(socket_last_error($server)) . "\n");
}
echo "Der Server wird gestartet,Monitor {$address}:{$port}\n";
while (true) {
// Blockieren und Warten auf die Kundenverbindung
$client = socket_accept($server);
if ($client === false) {
echo "socket_accept() scheitern: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
// Daten vom Client lesen,Maximale Lesen1024Byte
$input = socket_read($client, 1024);
if ($input === false) {
echo "socket_read() scheitern: " . socket_strerror(socket_last_error($client)) . "\n";
socket_close($client);
continue;
}
echo "Empfangene Clientdaten: $input\n";
// Verarbeitungsdaten - Hier ist eine einfache Antwort auf eine Nachricht im Client
$response = "Hallo,Kunde!Die Daten, die Sie senden, ist:" . trim($input) . "\n";
socket_write($client, $response, strlen($response));
// 关闭Kunde连接
socket_close($client);
}
// Den Server herunterfahrensocket(Normalerweise werde ich hier nicht gehen)
socket_close($server);
?>
Im tatsächlichen Gebrauch können Sie die Lese- und Schreiben von Logik entsprechend Ihren Anforderungen erweitern, z.
Die IP des Listener kann auf eine bestimmte Adresse eingestellt werden oder für alle verfügbaren Netzwerkschnittstellen mit '0.0.0.0' anhören.
Die Portnummer sollte vermieden werden, um das System zu verwenden, um Ports zu halten, und im Allgemeinen sollten die Ports über 1024 ausgewählt werden.
Der obige Code ist ein einzelner Thread-Server, der synchron blockiert ist und für Anfängerverständnis geeignet ist.
Über Socket_Listen () und Socket_accept () kann PHP TCP -Serverprogramme sehr direkt erstellen, um grundlegende Netzwerkkommunikationsfunktionen zu realisieren. Obwohl PHP keine Sprache ist, die speziell für Hochleistungsserver entwickelt wurde, ist es immer noch sehr praktisch, sie schnell zu verwenden, um kleine Dienste zu prototypisieren oder einige einfache Netzwerkinteraktionsanwendungen zu erstellen.