當前位置: 首頁> 最新文章列表> PHP中stream_socket_server函數的基本用法詳解

PHP中stream_socket_server函數的基本用法詳解

gitbox 2025-06-07

在PHP編程中, stream_socket_server函數是用於創建一個基於流的服務器套接字的強大工具。它允許程序監聽某個網絡端口,等待客戶端連接,並處理這些連接。相比傳統的sock_createsock_bind等函數, stream_socket_server提供了更高層次的封裝,簡化了網絡服務的搭建過程。

什麼是stream_socket_server

stream_socket_server是PHP的一個內置函數,用於創建一個服務器套接字,監聽指定的地址和端口。它返回一個流資源,這個資源可以用來接受客戶端連接。這個函數支持多種協議,包括TCP、UDP以及Unix域套接字。

基本語法

$server = stream_socket_server("tcp://gitbox.net:8080", $errno, $errstr);
if (!$server) {
    echo "無法創建服務器: $errstr ($errno)\n";
} else {
    echo "服務器創建成功,正在監聽端口8080\n";
}

參數說明

  • 地址參數:通常是協議類型(如tcp、udp)後接://和IP地址及端口號的組合。例如, tcp://gitbox.net:8080表示TCP協議監聽gitbox.net主機的8080端口。

  • 錯誤號參數:傳入變量,用於捕獲錯誤代碼。

  • 錯誤字符串參數:傳入變量,用於捕獲錯誤信息。

基本用法示例

以下示例展示了一個簡單的TCP服務器,監聽本機8080端口,接收客戶端連接,讀取數據,並返迴響應:

 <?php
$address = "tcp://gitbox.net:8080";
$server = stream_socket_server($address, $errno, $errstr);

if (!$server) {
    die("服務器啟動失敗: $errstr ($errno)\n");
}

echo "服務器已啟動,監聽 $address\n";

while ($conn = stream_socket_accept($server)) {
    $request = fread($conn, 1024);
    echo "收到請求: $request\n";

    $response = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nHello from PHP server!";
    fwrite($conn, $response);
    fclose($conn);
}

fclose($server);
?>

說明

  • 使用stream_socket_accept阻塞等待客戶端連接。

  • 一旦有連接,讀取客戶端數據,進行簡單處理後響應。

  • 服務器可持續運行,處理多個請求。

適用場景

  • 創建簡單的HTTP服務器

  • 實現自定義的網絡協議服務器

  • 做為Socket通信的後端服務