PHP 的 Socket 擴展可實作低階網路通訊。本文提供一個簡單的 TCP 回應伺服器與對應客戶端,展示建立連線、收發資料與關閉連線的完整流程。
<?php
// socket_server.php
set_time_limit(0); // 永不超時
$host = "127.0.0.1";
$port = 1234;
// 建立 Socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create 失敗: " . socket_strerror(socket_last_error()));
// 綁定 IP 與埠
socket_bind($socket, $host, $port) or die("socket_bind 失敗: " . socket_strerror(socket_last_error()));
// 開始監聽
socket_listen($socket, 3) or die("socket_listen 失敗: " . socket_strerror(socket_last_error()));
echo "伺服器啟動,監聽 $host:$port ...\n";
while (true) {
// 接受客戶端連線
$client = socket_accept($socket) or die("socket_accept 失敗: " . socket_strerror(socket_last_error()));
echo "客戶端已連線\n";
// 讀取資料
$input = socket_read($client, 1024) or die("socket_read 失敗: " . socket_strerror(socket_last_error()));
$input = trim($input);
echo "收到: $input\n";
// 處理並回應(這裡單純反轉字串)
$output = strrev($input) . "\n";
socket_write($client, $output, strlen($output)) or die("socket_write 失敗: " . socket_strerror(socket_last_error()));
// 關閉客戶端連線
socket_close($client);
}
// 關閉伺服器 Socket(實際不會執行到這裡)
socket_close($socket);
?>
<?php
// socket_client.php
$host = "127.0.0.1";
$port = 1234;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create 失敗");
$connection = socket_connect($socket, $host, $port) or die("socket_connect 失敗");
$message = "Hello PHP Socket!";
socket_write($socket, $message, strlen($message));
$response = socket_read($socket, 1024);
echo "伺服器回應: " . trim($response) . "\n";
socket_close($socket);
?>
php socket_server.phpphp socket_client.phpsocket_select() 實作多客戶端並發處理socket_set_nonblock()