當前位置: 首頁> 最新文章列表> socket_accept() + socket_write(): 發送響應到客戶端

socket_accept() + socket_write(): 發送響應到客戶端

M66 2025-05-20

在PHP中,socket編程是一種底層網絡通信方式,適用於構建自定義的服務端程序。本文將介紹如何使用socket_accept()函數接受客戶端連接,並通過socket_write()函數向客戶端發送響應。

1. 創建socket並綁定端口

首先,我們需要創建一個socket資源,並綁定到指定的IP地址和端口上,以便監聽客戶端請求。

 <?php
// 創建一個TCP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create() 失敗: " . socket_strerror(socket_last_error()) . "\n");
}

// 綁定IP和端口,假设綁定本地IP和端口8080
$bind = socket_bind($socket, "0.0.0.0", 8080);
if ($bind === false) {
    die("socket_bind() 失敗: " . socket_strerror(socket_last_error($socket)) . "\n");
}

2. 監聽並接受連接

綁定成功後,我們調用socket_listen()開始監聽,然後使用socket_accept()阻塞等待客戶端連接。

 // 開始監聽,允許最多5個連接排隊
socket_listen($socket, 5);
echo "服務器啟動,等待客戶端連接...\n";

while (true) {
    // 阻塞等待客戶端連接
    $clientSocket = socket_accept($socket);
    if ($clientSocket === false) {
        echo "socket_accept() 失敗: " . socket_strerror(socket_last_error($socket)) . "\n";
        continue;
    }

    echo "客戶端已連接\n";

3. 讀取客戶端請求並發送響應

接收到客戶端連接後,可以通過socket_read()讀取客戶端數據,並用socket_write()向客戶端發送響應。例如,發送一條簡單的歡迎消息。

     // 讀取客戶端數據,最多讀取1024位元組
    $input = socket_read($clientSocket, 1024);
    echo "收到客戶端消息: $input\n";

    // 發送響應數據
    $response = "歡迎訪問m66.net伺服器!\n";
    socket_write($clientSocket, $response, strlen($response));

    // 關閉客戶端連接
    socket_close($clientSocket);
}

4. 關閉服務端socket

當服務器需要關閉時,調用socket_close()釋放資源。

 socket_close($socket);

總結

以上代碼展示了一個簡單的基於PHP socket的服務器示例,重點在於:

這樣,你就可以通過PHP原生socket編程,搭建起基本的TCP服務端,靈活處理客戶端連接與通信。