Heim >Backend-Entwicklung >PHP-Tutorial >So implementieren Sie einen Socket in PHP

So implementieren Sie einen Socket in PHP

小云云
小云云Original
2018-03-31 14:09:525157Durchsuche

Dieser Artikel teilt Ihnen hauptsächlich die Methode zur Implementierung von Sockets in PHP mit, hauptsächlich in Form von Text und Code. Ich hoffe, er kann Ihnen helfen.

1. Einführung in Socket
1.
2. Verwenden Sie diese Socket-Datenstruktur, um eine Sitzung zwischen dem Client und dem Server zu starten.
3. Der Server hört ständig zu und bereitet sich darauf vor, eine neue Sitzung zu generieren. Wenn ein Client eine Verbindung zum Server herstellt, öffnet er einen Port, auf dem der Server auf eine Sitzung wartet.
4. Der Server akzeptiert die Verbindungsanfrage des Clients und führt dann eine Schleife aus. Jetzt kann der Client Informationen an den Server senden, und der Server kann Informationen an den Client senden.

2. Socket-Variablen
Um einen Socket zu generieren, benötigen Sie drei Variablen: ein Protokoll, einen Socket-Typ und einen öffentlichen Protokolltyp.

1. Vereinbarung

Quellcode anzeigen, in die Zwischenablage kopieren und Hilfe ausdrucken

  1. AF_INET

  2. //Das Protokoll, das Sockets generiert, TCP oder UDP zur Übertragung verwendet und in IPv4-Adressen verwendet wird

  3. AF_INET6

  4. //Das Protokoll, das den Socket generiert, TCP oder UDP zur Übertragung verwendet und in IPv6-Adressen verwendet wird

  5. AF_UNIX

  6. //Lokales Protokoll, das auf Unix- und Linux-Systemen verwendet wird, selten verwendet wird und normalerweise verwendet wird, wenn sich Client und Server auf demselben Computer befinden

2. Socket-Typ

Quellcode anzeigen, in die Zwischenablage kopieren und Hilfe drucken

  1. SOCK_STREAM

  2. //Dieses Protokoll ist eine sequentielle, zuverlässige, datenintegrierte Bytestream-basierte Verbindung. Dies ist der am häufigsten verwendete Socket-Typ. Dieser Socket verwendet TCP für die Übertragung.

  3. SOCK_DGRAM

  4. //Dieses Protokoll ist ein verbindungsloser Übertragungsanruf mit fester Länge . Dieses Protokoll ist unzuverlässig und verwendet UDP für seine Verbindungen.

  5. SOCK_SEQPACKET

  6. //Dieses Protokoll ist eine zweizeilige, zuverlässige Verbindung. Senden Sie Pakete fester Länge zur Übertragung. Dieses Paket muss vollständig akzeptiert werden, bevor es gelesen werden kann.

  7. SOCK_RAW

  8. //Dieser Socket-Typ bietet einen einzelnen Netzwerkzugriff, dieser Socket-Typ verwendet das öffentliche ICMP-Protokoll. (Ping und Traceroute verwenden dieses Protokoll)

  9. SOCK_RDM

  10. //Dieser Typ ist Wird selten verwendet, ist auf den meisten Betriebssystemen nicht implementiert und garantiert nicht die Reihenfolge der Datenpakete

3 >Quellcode anzeigen, in die Zwischenablage kopieren und Hilfe drucken

    ICMP
  1. //Internet Control Message Protocol, wird hauptsächlich auf Gateways und Hosts verwendet, Wird verwendet, um den Netzwerkstatus zu überprüfen und Fehlermeldungen zu melden
  2. UDP
  3. //Benutzer-Datagramm Protokoll, es ist ein verbindungsloses, unzuverlässiges Übertragungsprotokoll
  4. TCP
  5. //Übertragung Das Kontrollprotokoll ist das am häufigsten verwendete zuverlässige öffentliche Protokoll. Es kann sicherstellen, dass das Datenpaket den Empfänger erreicht. Wenn während des Übertragungsprozesses ein Fehler auftritt, wird das Fehlerpaket erneut gesendet.
  6. 3. Socket-Funktion
1. socket_create

Funktion: Generieren Sie einen Socket, was dem Generieren einer Socket-Datenstruktur entspricht
Verwendung: socket_create ( int domain, int-Typ, int-Protokoll )
Parameter: Domäne, Typ, Typ; Protokoll, öffentliches Protokoll
Rückgabe: Socket-Ressource bei Erfolg oder FALSE bei Fehler

2. socket_bind

Funktion : Binden Sie den Socket an eine IP-Adresse und einen Port

Verwendung: socket_bind (Ressourcen-Socket, String-Adresse [, int Port])
Parameter: Socket, Socket-Ressource; Adresse, IP-Adresse; Port
Rückgabe : Boolean

3. socket_accept
Funktion: Eine Socket-Verbindung akzeptieren
Verwendung: socket_accept (Ressourcen-Socket)
Parameter: Socket, Socket-Ressource
Rückgabe: Gibt bei Erfolg eine neue Socket-Ressource zurück, oder FALSE bei Fehler.

4. socket_connect()
Funktion: Socket-Verbindung starten
Verwendung: socket_connect (Ressource Socket, String-Adresse [, int Port])
Parameter: Socket, Socket-Ressource; Adresse, IP-Adresse; Port, Port
Rückgabe: Boolean

5. socket_listen
Funktion: Alle Verbindungen vom angegebenen Socket abhören
Verwendung: socket_listen (Ressource socket [, int backlog] )
Parameter: Socket, Socket-Ressource;
Rückgabe: Boolean

6. socket_read
Funktion: Daten der angegebenen Länge lesen
Verwendung: socket_read (Ressource socket, int length [, int type] )
Parameter: Socket, Socket-Ressource; Länge, Zeichenlänge; Typ, PHP_BINARY_READ |PHP_NORMAL_READ
Rückgabe: string

7. socket_write
Funktion: Daten in den Socket-Cache schreiben
Verwendung: socket_write (Ressourcen-Socket, String-Puffer [, int-Länge])
Parameter: Socket, Socket-Ressource;Puffer, Zeichen; Länge, Zeichenlänge;
Rückgabe: Boolean

8, socket_send()
Funktion: Diese Funktion sendet Daten an den verbundenen Socket
Verwendung: socket_send (resource socket, string buf, int len, int flags)
Parameter: socket, socket resources;buf, Character len; , Zeichenlänge;
Rückgabe: Boolean

9. socket_last_error
Funktion: Den letzten Fehlercode des aktuellen Sockets abrufen
Verwendung: socket_last_error ([Ressourcen-Socket])
Parameter: socket ,socket resources;
Rückgabe: int

10. socket_strerror
Funktion: Den detaillierten Fehler der angegebenen Fehlernummer zurückgeben
Verwendung: socket_strerror (int errno)
Parameter: errno , socket_last_error no ;
Rückgabe: string

11. socket_close
Funktion: eine Socket-Ressource schließen
Verwendung: socket_close ([Ressourcen-Socket])
Parameter: Socket, Socket-Ressource;
Rückgabe: null

Anleitung zur Verwendung
Bestätigen Sie die Methode zum Öffnen des Sockets
a. Entfernen Sie die Datei extension=php_sockets.dll.
b. Code zum Laden der Erweiterungsbibliothek

Quellcodekopie in Zwischenablage anzeigen, Hilfe drucken

  1. if(!extension_loaded('sockets')) {

  2. if(strtoupper(substr(PHP_OS, 0, 3)) == "WIN") {

  3. dl('php_sockets.dll') ;

  4. }else{

  5. dl('sockets.so');

    }
  6. 5. Socket-Programmierung
  7. Serverseite

    Funktion:
  8. a Daten senden und empfangen.

b. Warten Sie auf die Verbindung. Sobald eine Verbindung hergestellt ist, wird auf dem serverseitigen Bildschirm „Socket verbunden“ angezeigt.

c. Der Server überprüft den Puffer und sendet die Daten an den angeschlossenen Computer.

Dann sendet es eine Annahmenachricht für diese Daten. Sobald es die Nachricht akzeptiert, speichert es die Nachricht in den Daten, teilt dem angeschlossenen Computer die Nachricht mit und schließt schließlich die Verbindung.


d. Nachdem die Verbindung geschlossen wurde, beginnt der Server mit der Verarbeitung der nächsten Verbindung.

Quellcodekopie in Zwischenablage anzeigen, Hilfe drucken


2. Client

    Funktion:
  1. a . Der Client verbindet sich mit dem Server. Der Client liest die Daten.
    // 获取协议  
    $commonProtocol = getprotobyname("tcp");  
      
    //产生一个socket  
    $socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);  
      
    //把socket绑定在一个IP地址和端口上  
    socket_bind($socket, 'localhost', 1337);   
      
    //监听由指定socket的所有连接  
    socket_listen($socket);  
      
    //初始化buffer  
    $buffer = "NO DATA";  
    while(true) {  
        //接受一个Socket连接  
        $connection = socket_accept($socket);  
        printf("Socket connected\r\n");  
      
        // 检测 buffer  
        if($buffer != ""){  
            printf("Something is in the buffer...sending data...\r\n");  
            //写数据到socket缓存  
            socket_write($connection, $buffer . "\r\n");  
            printf("Wrote to socket\r\n");  
        }else {  
            printf("No Data in the buffer\r\n");  
        }  
      
        //读取指定长度的数据  
        while($data = socket_read($connection, 1024, PHP_NORMAL_READ))  
        {  
            $buffer = $data;  
            //写数据到socket缓存  
            socket_write($connection, "Information Received\r\n");  
            printf("Buffer: " . $buffer . "\r\n");  
        }  
        //关闭一个socket资源  
        socket_close($connection);  
        printf("Closed the socket\r\n\r\n");  
    }
  2. b. Wenn dies die erste Verbindung ist, die zum ersten Mal in dieser Schleife ankommt, sendet der Server „KEINE DATEN“ an den Client zurück. In diesem Fall befindet sich der Client an der Spitze der Verbindung.

c. Der Client sendet seine Daten an den Server, die Daten werden an den Server gesendet und der Client wartet auf eine Antwort. Sobald die Antwort empfangen wurde, wird die Antwort auf den Bildschirm geschrieben.

Quellcode-Kopie in Zwischenablage anzeigen, Hilfe drucken

Verwandte Empfehlungen:

Detaillierte Erklärung der Socket-Programmierung in PHP mit Beispielen

Detaillierte Erklärung der SOCKET-Programmierung in PHP

Detaillierte Erklärung des Sockets Kommunikation in PHP

Das obige ist der detaillierte Inhalt vonSo implementieren Sie einen Socket in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn