In PHP können wir Netzwerkprogramme über Socket -Erweiterungen erstellen. Unter ihnen ist die Funktion socKet_accept () eine der wichtigsten Funktionen beim Erstellen von TCP-basierten Serveranwendungen. In diesem Artikel wird ein vollständiges Beispiel verwendet, um zu beschreiben, wie ein einfacher Echo -Server (Echo -Server) mit socket_accept () implementiert wird.
Socket_accept () wird verwendet, um eine Verbindungsanforderung vom Client zu akzeptieren. Diese Funktion blockiert in der Server -Socket, bis eine Verbindung eingeht. Wenn es erfolgreich ist, gibt es eine neue Socket -Ressource zurück, mit der mit dem Kunden kommuniziert werden kann.
Grammatik:
resource socket_accept ( resource $socket )
$ Socket ist ein Server -Socket, der über Socket_Create () und Socket_Bind () erstellt und angehört wird.
Gibt eine Socket -Ressource zurück, die mit dem Kunden kommuniziert.
Hier sind die vollständigen Schritte zum Erstellen eines einfachen Echo -Servers:
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
die("socket_create() scheitern: " . socket_strerror(socket_last_error()) . "\n");
}
$host = '0.0.0.0';
$port = 12345;
if (!socket_bind($server, $host, $port)) {
die("socket_bind() scheitern: " . socket_strerror(socket_last_error($server)) . "\n");
}
if (!socket_listen($server, 5)) {
die("socket_listen() scheitern: " . socket_strerror(socket_last_error($server)) . "\n");
}
echo "Der Server wird gestartet,Hören Sie sich Port an $port ...\n";
while (true) {
$client = socket_accept($server);
if ($client === false) {
echo "socket_accept() scheitern: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
$msg = "Willkommen bei der Verbindung zum Echo -Server!Bitte geben Sie Inhalte ein,Der Server kehrt so zurück, wie es ist。\n";
socket_write($client, $msg, strlen($msg));
while (true) {
$input = socket_read($client, 2048, PHP_NORMAL_READ);
if ($input === false || trim($input) === 'exit') {
break;
}
$input = trim($input);
$output = "Sie haben eingegeben: $input\n";
socket_write($client, $output, strlen($output));
}
socket_close($client);
echo "Client -Verbindung geschlossen。\n";
}
Wenn Sie den Server stoppen müssen, können Sie den Hauptbuchsen schließen:
socket_close($server);
Sie können Telnet oder jedes Client -Tool verwenden, das die TCP -Verbindung unterstützt, um eine Verbindung zum Server herzustellen:
telnet m66.net 12345
Nachdem die Verbindung erfolgreich ist, antwortet der Server auf die Begrüßungsnachricht und gibt alles zurück, was Sie eingeben, so wie es ist.
Die Socket -Erweiterung von PHP ist standardmäßig nicht aktiviert und muss in php.ini aktiviert werden.
Dieses Beispiel ist der Blockierungsmodus und ist für Demonstrations- und Lehrzwecke geeignet. In den tatsächlichen Produktionsumgebungen wird empfohlen, den nicht blockierenden Modus oder Methoden wie Stream_Select () zu verwenden, um Unterstützung für mehrfacher Klare zu erhalten.
Stellen Sie sicher, dass das Firewall und das Betriebssystem die Höranschlüsse ermöglichen.
Über Socket_accept () kann PHP eine grundlegende TCP -Netzwerkanwendung erstellen. Der in diesem Artikel implementierte Echo -Server ist ein guter Ausgangspunkt für das Verständnis des Socket -Programmiermechanismus. Sie können basierend darauf weiter erweitern, um komplexere Netzwerkdienste wie Chatrooms, Fernbedienung usw. zu implementieren.
Das Beispiel für Echo -Server ist eines der grundlegendsten Modelle in der Socket -Programmierung, aber es öffnet die Tür für die Netzwerkprogrammierung für Sie. Durch die Beherrschung dieser Fundamente wird das Potenzial von PHP in der Netzwerkkommunikation unendlich erweitert.