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

PHP Socket 通信實現:客戶端收發數據完整封裝

     編輯:PHP 相關知識

TCP Socket 客戶端核心封裝

PHP 通過 socket_* 系列函數實現底層網絡通信,常用於對接舊系統、硬件設備、內部微服務。本文提供一個可復用的發送/接收函數,並附完整函數速查表。

通用收發函數

<?php
/**
 * Socket 發送數據並可選接收響應
 * @param string $host  服務器 IP
 * @param int    $port  端口
 * @param string $data  發送內容
 * @param int    $needRecv  是否等待響應 1=是 0=否
 * @return mixed  成功返回響應字符串/true,失敗返回 false
 */
function sendSocketMsg($host, $port, $data, $needRecv = 0) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket === false) return false;

    $conn = @socket_connect($socket, $host, $port);
    if ($conn === false) {
        socket_close($socket);
        return false;
    }

    socket_write($socket, $data, strlen($data));

    if ($needRecv) {
        $response = socket_read($socket, 1024);  // 可根據協議調整長度
        socket_close($socket);
        return $response;
    } else {
        socket_close($socket);
        return true;
    }
}
?>

使用示例

<?php
// 單向發送(如日誌上報)
sendSocketMsg('192.168.1.100', 9501, json_encode(['type'=>'log','msg'=>'test']));

// 雙向請求響應(如 RPC 調用)
$resp = sendSocketMsg('192.168.1.100', 9502, 'GET_STATUS', 1);
if ($resp !== false) {
    echo "服務端返回:$resp";
} else {
    echo "連接失敗或超時";
}
?>

Socket 核心函數速查表

函數用途
socket_create創建 Socket 資源
socket_connect發起連接
socket_write發送數據
socket_read讀取指定長度數據
socket_recv從緩衝區接收數據
socket_close關閉連接
socket_set_nonblock設置非阻塞模式
socket_select多路復用監聽
socket_get_option / socket_set_option獲取/設置選項
socket_last_error / socket_strerror錯誤碼與信息

關鍵注意事項

  • 讀取結束符:socket_read 遇 \n、\r、\0 視為結束,協議設計需約定分隔符
  • 非阻塞模式:高併發場景必須配合 socket_select 使用,避免進程掛起
  • 錯誤處理:每步檢查返回值,失敗時用 socket_last_error() 定位
  • 資源釋放:所有分支確保 socket_close() 執行,防止 fd 洩漏

進階方向

  • 封裝為類,支援連接池、心跳、重連、協議編解碼
  • 長連接場景考慮 Workerman、Swoole 等高性能框架
  • 異步非阻塞 IO 參考 stream_socket_client + stream_select

掌握 Socket 基礎操作,是理解高性能網絡編程、排查通信故障的關鍵技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved