PHP如何實現簡單的Socket

2020-07-16 10:05:50

PHP如何實現簡單的Socket

首先使用PHP製作的Socket伺服器端,其主要是設定Socket的IP地址及埠號;然後監聽埠,如果有用戶端連線的話,則接收連線請求和資料,最後處理資料並且返回資料即可。

範例程式碼:

<?php
//確保在連線用戶端時不會超時
set_time_limit(0);
//設定IP和埠號
$address = "127.0.0.1";
$port = 2048; //偵錯的時候,可以多換埠來測試程式!
/**
 * 建立一個SOCKET 
 * AF_INET=是ipv4 如果用ipv6,則引數為 AF_INET6
 * SOCK_STREAM為socket的tcp型別,如果是UDP則使用SOCK_DGRAM
*/
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失敗的原因是:" . socket_strerror(socket_last_error()) . "/n");
//阻塞模式
socket_set_block($sock) or die("socket_set_block() 失敗的原因是:" . socket_strerror(socket_last_error()) . "/n");
//係結到socket埠
$result = socket_bind($sock, $address, $port) or die("socket_bind() 失敗的原因是:" . socket_strerror(socket_last_error()) . "/n");
//開始監聽
$result = socket_listen($sock, 4) or die("socket_listen() 失敗的原因是:" . socket_strerror(socket_last_error()) . "/n");
echo "OKnBinding the socket on $address:$port ... ";
echo "OKnNow ready to accept connections.nListening on the socket ... n";
do { // never stop the daemon
 //它接收連線請求並呼叫一個子連線Socket來處理用戶端和伺服器間的資訊
 $msgsock = socket_accept($sock) or die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");
 
 //讀取用戶端資料
 echo "Read client data n";
 //socket_read函數會一直讀取用戶端資料,直到遇見n,t或者字元.PHP指令碼把這寫字元看做是輸入的結束符.
 $buf = socket_read($msgsock, 8192);
 echo "Received msg: $buf n";
 
 //資料傳送 向用戶端寫入返回結果
 $msg = "welcome n";
 socket_write($msgsock, $msg, strlen($msg)) or die("socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n");
 //一旦輸出被返回到用戶端,父/子socket都應通過socket_close($msgsock)函數來終止
 socket_close($msgsock);
} while (true);
socket_close($sock);
以上就是PHP如何實現簡單的Socket的詳細內容,更多請關注TW511.COM其它相關文章!