In der PHP-Netzwerkprogrammierung sind Socket_Create () und Socket_accept () zwei sehr wichtige Funktionen, insbesondere beim Erstellen von serverseitigen Anwendungen basierend auf TCP oder UDP. In diesem Artikel werden die grundlegenden Funktionen und die Verwendung dieser beiden Funktionen im Detail eingeführt und zeigen, wie sie zusammen verwendet werden können, um ein einfaches serverseitiges Programm zu implementieren.
Socket_Create () wird verwendet, um eine Socket -Ressource für die Netzwerkkommunikation zu erstellen, die der Ausgangspunkt der Netzwerkprogrammierung ist. Der Funktionsprototyp lautet wie folgt:
resource socket_create ( int $domain , int $type , int $protocol )
$ domain : Gibt die häufig verwendete Protokollfamilie an, die AF_INET (IPv4), AF_INET6 (IPv6) und AF_UNIX (lokale Kommunikation) sind.
$ type : Geben Sie den Socket -Typ an. Gemeinsame Typen sind Sock_stream (TCP -Streaming -Verbindung), sock_dgram (UDP -Datagramm).
$ Protokoll : Gibt das spezifische Protokoll an. Normalerweise verwendet TCP SOL_TCP und UDP verwendet Sol_Udp .
Gibt eine Socket -Ressource zurück, wenn die Erstellung erfolgreich ist, und gibt beim Versagen falsch zurück.
Beispiel:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("erstellen socket scheitern: " . socket_strerror(socket_last_error()));
}
Socket_accept () wird verwendet, um Client -Verbindungen auf dem vom Server gehört zugehörten Socket zu akzeptieren. Sein Funktionsprototyp ist:
resource socket_accept ( resource $socket )
Der Parameter $ Socket ist der Socket, der mit Socket_Create () erstellt und angehört wird.
Nach dem Anruf wird bei einer Client -Verbindungsanforderung eine neue Socket -Ressource zurückgegeben, um mit dem Kunden zu kommunizieren. Wenn es fehlschlägt, wird falsch zurückgegeben.
Damit der Server Clientanfragen anhören und Verbindungen empfangen kann, ist der übliche Prozess wie folgt:
Erstellen Sie eine Steckdose
Erstellen Sie einen Socket mit socket_create () .
Binden Sie Adresse und Port <br> Verwenden Sie Socket_Bind (), um Socket an lokale IP und Port zu binden.
Hören Sie Socket
Verwenden Sie Socket_Listen () , um den Port auf den Port anzuhören und sich darauf vorzubereiten, die Verbindung zu akzeptieren.
Akzeptieren Sie die Verbindung <br> Verwenden Sie Socket_accept (), um zu blockieren und zu warten, bis sich der Client verbindet, und geben Sie nach dem Erfolg einen neuen Socket zurück.
Daten lesen und schreiben <br> <br> Kommunikation mit dem Kunden über einen neuen Sockel.
Schließen Sie die Verbindung <br> Schließen Sie den Sockel nach Abschluss der Kommunikation.
Hier ist ein vollständiges Beispiel, das zeigt, wie ein einfacher TCP -Server mit diesen beiden Funktionen implementiert wird:
<?php
// erstellen TCP socket
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
die("erstellen socket scheitern: " . socket_strerror(socket_last_error()));
}
// Binden IP und Ports
if (!socket_bind($server, "0.0.0.0", 8080)) {
die("Binden socket scheitern: " . socket_strerror(socket_last_error($server)));
}
// Beginnen Sie mit der Überwachung,Am meisten erlaubt5Für Verbindungen aufstellen
if (!socket_listen($server, 5)) {
die("监听scheitern: " . socket_strerror(socket_last_error($server)));
}
echo "Der Server wird gestartet,Warten auf die Verbindung...\n";
while (true) {
// Blockieren und Warten auf die Kundenverbindung
$client = socket_accept($server);
if ($client === false) {
echo "接收连接scheitern: " . socket_strerror(socket_last_error($server)) . "\n";
continue;
}
// Clientdaten lesen
$input = socket_read($client, 1024);
echo "Empfangene Clientdaten: $input\n";
// Senden Sie eine Antwort an den Client
$response = "Hello from m66.net server!";
socket_write($client, $response, strlen($response));
// Client -Verbindung schließen
socket_close($client);
}
socket_close($server);
?>
In diesem Beispiel:
Der Server ist an Port 8080 aller lokalen IP -Adressen gebunden.
Verwenden Sie Socket_accept (), um Client -Verbindungsanforderungen zu empfangen, und geben Sie nach dem Erfolg einen neuen Socket zurück.
Lesen Sie die vom Client gesendeten Daten und geben Sie eine einfache Antwort zurück.
Schließen Sie die Verbindung zum Kunden und warten Sie weiter auf eine neue Verbindung.
Socket_Create () wird verwendet, um den zugrunde liegenden Kommunikationskanal zu erstellen.
Socket_accept () wird vom Server verwendet, um Clientverbindungen zu empfangen und Sockets zurückzugeben, die mit dem Client interagieren.
Die Kombination der beiden ist die Grundlage für die TCP-Server-Seite-Programmierung.
In tatsächlichen Anwendungen sind auch Fehler, gleichzeitige Verbindungen und Datenübertragungsdetails erforderlich.
Ich hoffe, dieser Artikel kann Ihnen helfen , Socket_Create () und Socket_Accept () in PHP besser zu verstehen und anzuwenden, um so leicht basierende Netzwerkdienste zu erstellen.