php 基於socket的基本通訊

來源:互聯網
上載者:User

標籤: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的基本通訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.