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

PHP 簡易 Socket 伺服器與客戶端範例

     編輯:PHP 相關知識

PHP 簡易 Socket 伺服器與客戶端範例

展示最基礎的 TCP 通訊:伺服器監聽埠、接受連線、讀取資料、回應處理結果、關閉連線;客戶端連線、發送、接收回應。

伺服器端 server.php

<?php
set_time_limit(0);
$host = '127.0.0.1';
$port = 1234;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, $host, $port);
socket_listen($socket, 3);

echo "Server started on $host:$port\n";

while (true) {
    $client = socket_accept($socket);
    $input = socket_read($client, 1024);
    $input = trim($input);
    echo "Received: $input\n";

    $output = strrev($input) . "\n"; // 反轉字串示範
    socket_write($client, $output, strlen($output));

    socket_close($client);
}
socket_close($socket);
?>

客戶端 client.php

<?php
$host = '127.0.0.1';
$port = 1234;

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $host, $port);

$msg = "Hello PHP Socket";
socket_write($socket, $msg, strlen($msg));

$response = socket_read($socket, 1024);
echo "Server reply: " . trim($response) . "\n";

socket_close($socket);
?>

執行步驟

  1. 終端機 1:php server.php
  2. 終端機 2:php client.php
  3. 觀察伺服器收到 "Hello PHP Socket",回應 "tekcoS PHP olleH"

常見問題

  • 埠被佔用:更換 $port 或 lsof -i :1234 找出佔用程序
  • 防火牆阻擋:本機測試通常無問題,跨機器需開放埠
  • 阻塞模式:預設阻塞,單進程只能服務一客戶端;生產環境請使用 socket_select 或 pcntl_fork 實現並發

擴充建議

  • 定義簡單協定:長度(4字節) + JSON內容 解決黏包
  • 加入心跳機制檢測斷線
  • 使用 ReactPHP、Swoole、Workerman 等高效能框架替代原生 Socket
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved