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

PHP Socket 通訊實戰:客戶端收發資料完整封裝函數

     編輯:PHP 相關知識

PHP Socket 通訊實戰:客戶端收發資料完整封裝函數

PHP 需與其他程式(如 Java、Go、C++ 服務)交換資料時,Socket 是基礎選擇。本文提供一個開箱即用的封裝函數,支援發送資料與可選的同步接收回應。

核心封裝函數

/**

* Socket 發送/接收資料

* @param string $host 目標伺服器 IP

* @param int $port 目標端口

* @param string $str 待發送資料

* @param int $back 是否等待回應:1=是, 0=否

* @return mixed 成功返回 true/回應資料,失敗返回 false

*/

function sendSocketMsg($host, $port, $str, $back = 0) {

$socket = socket_create(AF_INET, SOCK_STREAM, 0);

if ($socket < 0) return false;

$result = @socket_connect($socket, $host, $port);

if ($result === false) return false;

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

if ($back != 0) {

$input = socket_read($socket, 1024); // 讀取最多 1024 位元組

socket_close($socket);

return $input;

} else {

socket_close($socket);

return true;

}

}

關鍵點:socket_read 第二參數限制讀取長度,防止阻塞。預設遇到 \n、\t 或 \0 視為輸入結束。

PHP Socket 擴展核心函數速查表

函數用途
socket_create()建立 Socket 資源
socket_connect()發起連線
socket_write()寫入資料到緩衝區
socket_read()讀取指定長度資料
socket_close()關閉連線釋放資源
socket_set_block() / socket_set_nonblock()設定阻塞/非阻塞模式
socket_select()多路複用監聽
socket_get_option() / socket_set_option()獲取/設定 Socket 選項
socket_last_error() / socket_strerror()錯誤碼與錯誤訊息

其餘進階函數(socket_iovec_*、socket_recvmsg、socket_sendto 等)適用於高性能分散/聚合 I/O 場景,日常較少直接使用。

常見坑點提醒

  • socket_read() 會持續讀取直到遇到 \n/\t/\0,若協議無明確結束符需自行處理
  • 生產環境建議加入超時控制(socket_set_option 設定 SO_RCVTIMEO/SO_SNDTIMEO)
  • 長連線場景請妥善管理連線池,避免檔案描述符耗盡
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved