Bei der Netzwerkprogrammierung wird PHP nicht nur zur Entwicklung von Webanwendungen verwendet, sondern kann auch zum Erstellen von Netzwerkkommunikationsprogrammen auf niedriger Ebene wie TCP-Server verwendet werden. Socket_accept () ist eine der wichtigsten Funktionen in PHP, um Client -Verbindungen zu akzeptieren. In diesem Artikel werden Sie Schritt für Schritt einen einfachen TCP -Server erstellen und die wichtigsten Punkte erläutern.
Socket_accept () ist eine Funktion in der PHP -Socket -Erweiterung, die auf dem Server zuhört, um Verbindungsanforderungen für einen etablierten Socket zu empfangen. Sobald der Client eine Verbindung angefordert hat, gibt Socket_accept () eine neue Socket -Instanz zurück, mit der mit dem Kunden und nicht mit dem Haupthörbock kommuniziert wird.
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() scheitern: " . socket_strerror(socket_last_error()) . "\n");
}
Diese Codezeile erstellt einen TCP -Socket ( SOCK_STREAM ) von IPv4 ( AF_Inet ) und der Protokolltyp ist TCP ( Sol_tcp ).
if (!socket_bind($socket, '0.0.0.0', 12345)) {
die("socket_bind() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n");
}
Dieser Schritt bindet den Socket an die lokale IP und den lokalen Port, wie z. B. 12345 .
if (!socket_listen($socket, 5)) {
die("socket_listen() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n");
}
Hören Sie sich eingehende Verbindungen an, 5 gibt die maximal zulässige Länge der Warteverbindungswarteschlange an.
while (true) {
echo "Warten auf die Kundenverbindung...\n";
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "socket_accept() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
$welcomeMsg = "Willkommen zu m66.net von PHP TCP Server!\n";
socket_write($clientSocket, $welcomeMsg, strlen($welcomeMsg));
// Kundeninformationen lesen
$input = socket_read($clientSocket, 1024);
echo "Empfangen Sie eine Client -Nachricht: " . $input;
// Auf den Kunden antworten
$response = "Du hast es geschickt: " . trim($input) . "\n";
socket_write($clientSocket, $response, strlen($response));
// Client -Verbindung schließen
socket_close($clientSocket);
}
Im obigen Code wird der Server unendlich geschoben, damit der Client eine Verbindung herstellt. Sobald die Verbindung hergestellt ist, wird eine Begrüßungsnachricht gesendet, die Client-Eingabe wird gelesen und sie wird zurückgegeben.
Obwohl der obige Code ein Infinite -Loop -Server ist, sollte der Interrupt -Mechanismus oder eine Signalverarbeitung in der tatsächlichen Verwendung hinzugefügt werden. Der Code zum Abschalten des Servers ist wie folgt:
socket_close($socket);
Sie können Telnet verwenden, um diesen TCP -Server zu testen:
telnet m66.net 12345
Wenn die Verbindung erfolgreich ist, wird die vom Server zurückgegebene Begrüßungsnachricht angezeigt.
Die Socket -Erweiterung von PHP ist standardmäßig nicht aktiviert, stellen Sie sicher, dass die Sockets in php.ini aktiviert sind.
Bitte verwenden Sie die Befehlszeile, um das Skript auszuführen. Die Webumgebung ist nicht für die Ausführung solch lang verbundener Dienste geeignet.
Während der tatsächlichen Bereitstellung sollten Funktionen wie Ausnahmebehandlung, Protokollierung und Multi-Process-Verarbeitung hinzugefügt werden.
Über diesen Artikel haben Sie gelernt, wie man einen einfachen TCP -Server mit der Funktion PHP Socket_accept () erstellt. Obwohl PHP nicht die bevorzugte Sprache für Webdienste ist, bietet es auch die erforderlichen Tools, um die Grundbedürfnisse zu erfüllen. In diesem kleinen Serverbeispiel zeigt die leistungsstarke Flexibilität von PHP.