標籤:
<?phpclass SendDevAction{ //log記錄檔 private $logDevFile = ""; //日誌字串 private $logStr = ""; //用於發送接收的socket對象 private $socket; //socket連線物件 private $connect; //對方伺服器ip private $host = "211.155.82.229"; //伺服器連接埠 private $port = 14527; //接收回傳字串長度 private $getStrLength = 16384; function __construct(){ //確定記錄檔路徑,(自訂) $this->logDevFile = "Temp/socket_log/" . date("Y-m-d") . "Dev.log"; //建立一個socket,定義相關屬性。AF_INET 在socket中定義為常量值為2,SOCK_STREAM常量值為1,SOL_TCP值為6 $this->socket = socket_create ( AF_INET, SOCK_STREAM, SOL_TCP ); //串連對方機器 $this->connect = socket_connect ( $this->socket, $this->host, $this->port ); //第一次握手,如果失敗則返回不再執行 $this->firstHandshake(); } //socket第一次握手 function firstHandshake(){ //日誌寫入本次握手時間,和遠程伺服器(發送+接收)一次算一次握手 $this->logStr .= "\r\n\r\n".date("Y-m-d H:i:s")."\r\n"; //要發送的字串 $sendStr = "hello world"; //日誌寫入發送的字串 $this->logStr .= $sendStr."\r\n"; //發送字串 socket_write ( $this->socket, $sendStr, strlen ( $sendStr ) ); //接收 $getStr = socket_read ( $this->socket, $this->getStrLength ); /* //如果接收字串過大,可迴圈多次接收直到接收完整 $getStr = ""; while(true){ $getStr .= socket_read( $this->socket,$this->getStrLength,PHP_BINARY_READ); //根據回傳字串內容格式判斷已接收完全字串,這裡回傳字串以 }] 結尾,並且全文只包含一次 }] 字串 if(substr_count($getStr, "}]") > 0){ break; } } */ //日誌寫入接收完成時間 $this->logStr .= date("Y-m-d H:i:s")."\r\n"; //日誌寫入接收字串 $this->logStr .= $getStr."\r\n\r\n"; //將日誌內容補充寫入記錄檔文本的最下面,如無記錄檔則產生新記錄檔 file_put_contents($this->logDevFile, $this->logStr,FILE_APPEND); //關閉socket串連 socket_close ( $this->connect ); //關閉socket對象 socket_close ( $this->socket ); }}//此socket代碼只是發送訊息的用戶端,不是接收的伺服器端,伺服器端以後補充$sendDevAction = new SendDevAction();
php socket 用戶端代碼