首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP Socket 程式設計入門:TCP 伺服器與客戶端完整範例

     編輯:PHP 相關知識

PHP Socket 程式設計入門:TCP 伺服器與客戶端完整範例

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);
?>

執行與測試步驟

  1. 終端機啟動伺服器:php socket_server.php
  2. 另開終端機啟動客戶端:php socket_client.php
  3. 觀察雙向通訊結果

進階改進方向

  • 使用 socket_select() 實作多客戶端並發處理
  • 加入非阻塞模式 socket_set_nonblock()
  • 設計通訊協定(如 JSON、固定長度標頭)解決封包黏包問題
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved