Aktueller Standort: Startseite> Neueste Artikel> Verwenden Sie Socket_accept (), um einen grundlegenden PHP -TCP -Server zu erstellen

Verwenden Sie Socket_accept (), um einen grundlegenden PHP -TCP -Server zu erstellen

M66 2025-05-23

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.

1. Was ist Socket_accept ()?

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.

2. Schritte zum Erstellen eines TCP -Servers

Schritt 1: Erstellen Sie einen Sockel

 $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 ).

Schritt 2: Binden Sie die Adresse und den Port ein

 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 .

Schritt 3: Hören Sie sich die Verbindung an

 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.

Schritt 4: Akzeptieren Sie die Verbindung und verarbeiten Sie die Anfrage

 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.

Schritt 5: Schließen Sie den Hauptbuchse

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);

3. Client -Verbindungstest

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.

4.. Dinge zu beachten

  • 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.

Abschluss

Ü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.