Bei der Verwendung von PHP für die Netzwerkprogrammierung ist Socket ein wichtiger Mechanismus für die Implementierung der Server-Klienten-Kommunikation. Socket_accept () und Socket_read () sind wichtige Funktionen für die Behandlung von Clientverbindungen und das Lesen von Nachrichten. In diesem Artikel wird ausführlich erläutert, wie diese beiden Funktionen verwendet werden, um ein einfaches TCP -Serverprogramm zu erstellen, um die Funktion des Empfangens von Client -Nachrichten zu realisieren.
Stellen Sie zunächst sicher, dass PHP die Sockets -Erweiterung installiert hat. Verwenden Sie den folgenden Befehl in der Befehlszeile, um zu überprüfen, ob er unterstützt wird:
php -m | grep sockets
Wenn Sie nicht aktiviert sind, können Sie die Erweiterung = Sockets in php.ini überzeugen und den Server neu starten.
Im Folgenden finden Sie einen vollständigen Beispielcode, der zeigt, wie Sie Socket_accept () und Socket_Read () verwenden, um von den Clients gesendeten Nachrichten zu empfangen.
<?php
// aufstellen IP und Ports
$host = '0.0.0.0';
$port = 8080;
// erstellen Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("socket_create() scheitern: " . socket_strerror(socket_last_error()) . "\n");
}
// An die angegebenen binden IP und Ports
if (!socket_bind($socket, $host, $port)) {
die("socket_bind() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n");
}
// Hören Sie sich die Verbindung an
if (!socket_listen($socket, 5)) {
die("socket_listen() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n");
}
echo "Der Server hat begonnen,Monitor {$host}:{$port}...\n";
// Client -Verbindungen für unendliche Schleifenverarbeitung
while (true) {
// Kundenverbindungen akzeptieren
$client = socket_accept($socket);
if ($client === false) {
echo "socket_accept() scheitern: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
// Lesen Sie Nachrichten vom Client
$input = socket_read($client, 1024);
if ($input === false) {
echo "socket_read() scheitern: " . socket_strerror(socket_last_error($client)) . "\n";
} else {
echo "Empfangen Sie eine Client -Nachricht: " . trim($input) . "\n";
// Antwort an den Kunden
$response = "Der Server hat eine Nachricht erhalten: " . $input . "\n";
socket_write($client, $response, strlen($response));
}
// Client -Verbindung schließen
socket_close($client);
}
// Schließen Sie die Hauptdarsteller Socket
socket_close($socket);
Sie können Telnet verwenden, um den Server wie folgt zu testen oder einen einfachen PHP -Client zu schreiben:
<?php
$host = 'm66.net';
$port = 8080;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("erstellen客户端 socket scheitern: " . socket_strerror(socket_last_error()) . "\n");
}
if (!socket_connect($socket, $host, $port)) {
die("连接scheitern: " . socket_strerror(socket_last_error($socket)) . "\n");
}
$message = "Hallo,Serverseite!";
socket_write($socket, $message, strlen($message));
$response = socket_read($socket, 1024);
echo "收到Serverseite回应: $response\n";
socket_close($socket);
Socket_accept () : Wird verwendet, um Verbindungsanforderungen vom Client zu akzeptieren. Wenn es keine Clientverbindung gibt, blockiert es.
SOCKKET_READ () : Wird zum Lesen von Daten vom Client verwendet. Es kann die maximale Anzahl von Bytes angeben, die gelesen werden sollen, normalerweise 1024 oder mehr.
SOCKKET_WRITE () : Wird verwendet, um Daten an den Client zu senden.
Der grundlegende TCP -Kommunikationsmechanismus kann mit socket_accept () und socket_read () implementiert werden. Obwohl PHP nicht die am häufigsten verwendete Sprache für die zugrunde liegende Netzwerkprogrammierung ist, verfügt es immer noch über starke Funktionen für Netzwerkkommunikation über Socket -Erweiterungen. In bestimmten Szenarien, wie z. B. das Erstellen leichter Dienste, Nachrichtenhörer oder Gateway -Komponenten, ist PHP Socket eine einfache und praktische Wahl.
Mit den Beispielen in diesem Artikel haben Sie gelernt, wie man einen Server -Socket erstellt, Clientverbindungen akzeptiert, Client -Nachrichten liest und antwortet. Kombinieren Sie ein geeignetes Fehlerbehebung und das gleichzeitige Design, kann ein komplexeres Kommunikationssystem weiter erstellt werden.