Beginnen wir mit einem einfachen Beispiel – einem TCP-Dienst, der eine Eingabezeichenfolge empfängt, verarbeitet und an den Client zurückgibt. Hier ist der entsprechende Code:
PHP-Code:
<?
// 设置一些基本的变量
$host = "192.168.1.99" ;
$port = 1234 ;
// 设置超时时间
set_time_limit ( 0 );
// 创建一个Socket
$socket = socket_create ( AF_INET , SOCK_STREAM , 0 ) or die( "Could not create
socketn" );
//绑定Socket到端口
$result = socket_bind ( $socket , $host , $port ) or die( "Could not bind to
socketn" );
// 开始监听链接
$result = socket_listen ( $socket , 3 ) or die( "Could not set up socket
listenern" );
// accept incoming connections
// 另一个Socket来处理通信
$spawn = socket_accept ( $socket ) or die( "Could not accept incoming
connectionn" );
// 获得客户端的输入
$input = socket_read ( $spawn , 1024 ) or die( "Could not read inputn" );
// 清空输入字符串
$input = trim ( $input );
//处理客户端输入并返回结果
$output = strrev ( $input ) . "n" ;
socket_write ( $spawn , $output , strlen ( $output )) or die( "Could not write
outputn" );
// 关闭sockets
socket_close ( $spawn );
socket_close ( $socket );
?>
Im Folgenden finden Sie eine detaillierte Beschreibung jedes Schritts:
1. Der erste Schritt besteht darin, zwei Variablen zu erstellen, um die IP-Adresse und den Port des Servers zu speichern, auf dem der Socket ausgeführt wird. Sie können ihn auf Ihren eigenen Server und Port festlegen (dieser Port kann eine Zahl zwischen 1 und 65535 sein), vorausgesetzt dass dieser Port nicht verwendet wird.
PHP-Code:
<?
// 设置两个变量
$host = "192.168.1.99" ;
$port = 1234 ;
?>
2. Sie können die Funktion set_time_out() auf der Serverseite verwenden, um sicherzustellen, dass PHP beim Warten auf die Verbindung des Clients nicht abläuft.
PHP-Code:
<?
// 超时时间
set_time_limit ( 0 );
?>
3. Basierend auf den vorherigen ist es an der Zeit, einen Socket mit der Funktion socket_creat() zu erstellen – diese Funktion gibt ein Socket-Handle zurück, das in allen nachfolgenden Funktionen verwendet wird.
PHP-Code:
<?
// 创建Socket
$socket = socket_create ( AF_INET , SOCK_STREAM , 0 ) or die( "Could not create socketn" );
?>
Der erste Parameter „AF_INET“ dient zur Angabe des Domänennamens;
Der zweite Parameter „SOCK_STREM“ teilt der Funktion mit, welcher Socket-Typ erstellt wird (TCP-Typ in diesem Beispiel).
Wenn Sie also einen UDP-Socket erstellen möchten, können Sie den folgenden Code verwenden:
PHP-Code:
<?
// 创建socket
$socket = socket_create ( AF_INET , SOCK_DGRAM , 0 ) or die( "Could not create socketn" );
?>
4. Sobald ein Socket-Handle erstellt wurde, besteht der nächste Schritt darin, es an die angegebene Adresse und den angegebenen Port zu binden. Dies kann über die Funktion socket_bind() erfolgen.
PHP-Code:
<?
// 绑定socket to 指定地址和端口
$result = socket_bind ( $socket , $host , $port ) or die( "Could not bind to socketn" );
?>
5. Nachdem der Socket erstellt und an einen Port gebunden wurde, können Sie mit der Überwachung auf externe Verbindungen beginnen. Mit PHP können Sie eine Überwachung über die Funktion socket_listen() starten und eine Zahl angeben (in diesem Beispiel ist es die zweite). Parameter: 3)
PHP-Code:
<?
// 开始监听连接
$result = socket_listen ( $socket , 3 ) or die( "Could not set up socket listenern" );
?>
6. Bisher hat Ihr Server im Grunde nichts anderes getan, als auf eine Verbindungsanfrage vom Client zu warten. Sobald eine Client-Verbindung empfangen wird, kommt die Funktion socket_assept() ins Spiel. Sie empfängt die Verbindungsanfrage und ruft eine andere Untergruppe auf. Socket verarbeitet Client-Server-Informationen.
PHP-Code:
<?
//接受请求链接
// 调用子socket 处理信息
$spawn = socket_accept ( $socket ) or die( "Could not accept incoming connectionn" );
?>
Dieser Subsocket kann nun für die nachfolgende Client-Server-Kommunikation verwendet werden.
7. Wenn eine Verbindung hergestellt ist, wartet der Server darauf, dass der Client einige Eingabeinformationen sendet. Diese Informationen können mit der Funktion socket_read() abgerufen und der Variablen $input von PHP zugewiesen werden.
PHP-Code:
<?
// 读取客户端输入
$input = socket_read ( $spawn , 1024 ) or die( "Could not read inputn" );
?>
Der zweite Parameter von socker_read wird verwendet, um die Anzahl der zu lesenden Bytes anzugeben. Sie können damit die Größe der vom Client erhaltenen Daten begrenzen.
Hinweis: Die Funktion socket_read liest die Shell-Client-Daten weiter, bis sie auf die Zeichen n, t oder trifft. Das PHP-Skript betrachtet diese Zeichen als Ende der Eingabe.
8. Jetzt muss der Server die vom Client gesendeten Daten verarbeiten (in diesem Beispiel umfasst die Verarbeitung nur die Eingabe und Rückgabe von Daten an den Client. Dieser Teil kann durch die Funktion socket_write() abgeschlossen werden (so dass die gesendeten Daten). über den Kommunikations-Socket ist es möglich, einen Datenstrom an den Client zurückzusenden)
PHP-Code:
<?
// 处理客户端输入并返回数据
$output = strrev ( $input ) . "n" ;
socket_write ( $spawn , $output , strlen ( $output )) or die( "Could not write outputn" );
?>
9. Sobald die Ausgabe an den Client zurückgegeben wird, sollte der übergeordnete/untergeordnete Socket über die Funktion socket_close() beendet werden
PHP-Code:
<?
// 关闭sockets
socket_close ( $spawn );
socket_close ( $socket );
?>