標籤:log mit pre tar 計數 limit 9.png Null 字元串 輸入
php 基於socket的基本通訊1、前言
Socket是應用程式層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。
這種介紹度娘很多,希望瞭解更多的自行百度,往下看的朋友記得先開啟socket擴充;
2、建立socke伺服器端
基本步驟:
- 初始化86socket
- 連接埠綁定
- 連接埠進行監聽
- 調用accept阻塞
- 等待客服端串連
3、伺服器端代碼實現
<?phpecho "****************server*****************\r\n";//設定 IP 和 連接埠(連接埠必須保證不被佔用,且允許被外部存取)$ip = "127.0.0.1";$port = 1935;//逾時設計set_time_limit(0);//建立socket$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("建立socket失敗,原因為:{socket_strerror($socket)}\r\n");//綁定socket到指定ip和連接埠$ret = socket_bind($socket, $ip, $port) or die("綁定socket失敗,原因為:{socket_strerror($ret)}\r\n");//監聽socket,最大等會數為4$ret = socket_listen($socket, 4) or die("監聽socket失敗,原因為:{socket_strerror($ret)}\r\n");//計數$count = 0;echo "等待串連!!!\r\n";do { //收到請求串連 //調用子socket處理資訊 $msgsock = socket_accept($socket); if(!$msgsock){ echo "socket阻塞失敗,原因為:{socket_strerror($msgsock)}\r\n"; } $msg = "<p style=‘color:red‘>串連成功</p>"; //處理客服端輸入並返回資料 socket_write($msgsock, $msg, strlen($msg)); $buf = socket_read($msgsock, 8192); $talkback = "收到的資訊為:{$buf}\r\n"; echo $talkback; if(++$count > 5) { break; } socket_close($msgsock);} while(true);socket_close($socket);
4、建立slient用戶端
基本步驟:
- 使用TCP協議建立一個socket資源
- 串連socket伺服器
- socket_write 傳輸資料
- socket_read 接收資料
- 關閉socket資源
5、用戶端代碼實現
<?phpecho ‘****************client*****************<br/>‘;//設定 IP 和 連接埠 $port = 1935;$ip = ‘127.0.0.1‘;//逾時設計set_time_limit(0);//建立TCP協議的socket資源$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die(‘socket_create 失敗:‘.socket_strerror($socket));echo ‘建立成功<br/>‘;$restult = socket_connect($socket, $ip, $port);echo ‘串連成功<br/>‘;$in = ‘建立一個sokcet客服端成功,隨機編號=‘.rand(1000,9999);if(socket_write($socket, $in, strlen($in))) { echo ‘發送成功,發送資訊為‘.$in.‘<br/>‘;} else { echo ‘發送失敗,原因為‘.$socket_strerror($socket).‘<br/>‘;}while($out = socket_read($socket, 8192)) { echo ‘接收資訊成功,資訊為‘.$out.‘<br/>‘;}echo ‘socket關閉<br/>‘;socket_close($socket);echo ‘關閉完成<br/>‘;
6、開啟客服端7、使用用戶端串連服務端
服務端狀態:
到這裡socket的基本串連就差不多了。
8、相關行數介紹
8.1、socket_create
用於建立一個socket資源,成功返回一個通訊端,失敗返回false;
詳情參考:http://www.php.net/manual/zh/function.socket-create.php
8.2、socket_bind
綁定一個名稱到socket,成功返回true,失敗返回時false;
詳情參考:http://php.net/manual/en/function.socket-bind.php
8.3、socket_listen
監聽一個socket資源,成功返回true,失敗返回時false;
詳情參考:http://php.net/manual/zh/function.socket-listen.php
、
8.4、socket_accept
合法建立一個子socket,成功返回一個新的socket資源,失敗返回false;
詳情參考:http://www.php.net/manual/en/function.socket-accept.php
8.5、socket_read
讀取客服端發送的資訊,成功返回讀取的資訊,否則返回Null 字元串
(socket_read() returns a zero length string ("") when there is no more data to read.)
詳情參考:http://www.php.net/manual/en/function.socket-read.php
8.6、socket_write
想socket寫入資料到緩衝
詳情參考:http://php.net/manual/en/function.socket-write.php
8.7、socket_close
關閉socket資源
詳情參考:http://php.net/manual/zh/function.socket-close.php
8.8、socket_strerror
擷取錯誤資訊
詳情參考:http://php.net/manual/zh/function.socket-strerror.php
php 基於socket的基本通訊