Heim >Backend-Entwicklung >PHP-Tutorial >So implementieren Sie einen Socket in PHP
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
AF_INET
//Das Protokoll, das Sockets generiert, TCP oder UDP zur Übertragung verwendet und in IPv4-Adressen verwendet wird
AF_INET6
//Das Protokoll, das den Socket generiert, TCP oder UDP zur Übertragung verwendet und in IPv6-Adressen verwendet wird
AF_UNIX
//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
SOCK_STREAM
//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.
SOCK_DGRAM
//Dieses Protokoll ist ein verbindungsloser Übertragungsanruf mit fester Länge . Dieses Protokoll ist unzuverlässig und verwendet UDP für seine Verbindungen.
SOCK_SEQPACKET
//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.
SOCK_RAW
//Dieser Socket-Typ bietet einen einzelnen Netzwerkzugriff, dieser Socket-Typ verwendet das öffentliche ICMP-Protokoll. (Ping und Traceroute verwenden dieses Protokoll)
SOCK_RDM
//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
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
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
if(!extension_loaded('sockets')) {
if(strtoupper(substr(PHP_OS, 0, 3)) == "WIN") {
dl('php_sockets.dll') ;
}else{
dl('sockets.so');
}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
// 获取协议 $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"); }
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!