socket通訊的原理在這裡就不說了,它的用途還是比較廣泛的,我們可以使用
socket
來做乙個
api介面出來,也可以使用
socket
來實現兩個程式之間的通訊,我們來研究一下在
php開發
中如何實現socket通訊。
由於socket服務端的**要監聽埠,等待接收請求,所以
php在做
socket
服務的時候需要將
php檔案執行在
cmd裡面。
如果要使php檔案可以在
cmd裡面執行,則需要進行如下設定:
1.新增環境變數,名字為
php_home
,值為php
檔案安裝目錄下的
.exe
檔案位址,如
2.修改系統變數
path的值
在path的值裡面新增
php安裝的目錄:如
好了,到這裡我們就配置好了環境變數,下一步我們開啟cmd,想要在裡面執行
php檔案,比如
aaa.php
檔案,則我們寫上這一句話:
phpd:\wamp\www\aaa.php
然後按下回車鍵,好了,我們的php檔案在
cmd裡面執行了,輸出了一句:
這樣的話php檔案能夠成功在
cmd裡面執行,接下來我們來看一下
php怎麼實現
socket
通訊。
1.php製作的
socket
服務端
主要功能是設定socket通訊的
ip位址及埠號,監聽埠,有客戶端連線的話,接收連線請求接收資料,處理並且返回資料。
**如下:
//確保在連線客戶端時不會超時
set_time_limit(0);//設定
ip和埠號
$address = "127.0.0.1";
$port = 2048; //除錯的時候,可以多換埠來測試程式!
/**
* 建立乙個
socket
* af_inet=是
ipv4
如果用ipv6
,則引數為
af_inet6
* sock_stream為
socket
的tcp
型別,如果是
udp則使用
sock_dgram
$sock = socket_create(af_inet, sock_stream, sol_tcp)or die("socket_create() 失敗的原因是
:" . socket_strerror(socket_last_error()) . "/n");//
阻塞模式
socket_set_block($sock)or die("socket_set_block() 失敗的原因是
:" . socket_strerror(socket_last_error()) . "/n");//
繫結到socket埠
$result = socket_bind($sock, $address, $port)or die("socket_bind() 失敗的原因是
:" . socket_strerror(socket_last_error()) . "/n");//
開始監聽
$result = socket_listen($sock, 4)or die("socket_listen() 失敗的原因是
:" . socket_strerror(socket_last_error()) . "/n");echo"ok\nbinding the socket on $address:$port ... ";echo"ok\nnow ready to accept connections.\nlistening on the socket ... \n";dowhile(true);
socket_close($sock);
2.調取
socket
服務的客戶端檔案
客戶端依然是要設定好要訪問伺服器的ip位址及埠號(即上一步驟中的
ip及埠),完了建立乙個
socket
連線,傳送資料到伺服器,接收返回資料。
set_time_limit(0);
$host = "127.0.0.1";
$port = 2048;
$socket = socket_create(af_inet, sock_stream, sol_tcp)or die("could not create socket\n"); // 建立乙個
socket
$connection = socket_connect($socket, $host, $port)or die("could not connet server\n"); // 連線
socket_write($socket, "hello socket")or die("write failed\n"); // 資料傳送 向伺服器傳送訊息while($buff = @socket_read($socket, 1024, php_normal_read)) {
echo("response was:" . $buff . "\n");
socket_close($socket);
3.在cmd
裡面執行服務端**
執行成功,已經在監聽埠了。。。
4.在網頁裡面執行我們的客戶端網頁,來向伺服器互動資料
執行起來,瀏覽器顯示:
cmd裡面的服務端顯示:
這是乙個簡單的socket通訊的測試,至於
socket
接收到什麼資料,怎麼處理資料,返回什麼型別的資料,還需要使用
php來做邏輯了。
epoll實現簡單socket通訊
epoll是常用的socket通訊方式,相比於select和poll來說,效率提公升了不止一點半點 其一 select中socket描述符 檔案描述符 集的資料結構為陣列,poll的檔案描述符集資料結構為鍊錶,無論陣列還是鍊錶,它們都是線性結構,當遍歷時,也只能線性遍歷 而epoll檔案描述符集採用...
簡單Socket通訊
示例程式是同步套接字程式,功能很簡單,只是客戶端發給伺服器一條資訊,伺服器向客戶端返回一條資訊 這裡只是乙個簡單的示例,是乙個最基本的socket程式設計流程,在接下來的文章中,會依次記錄套接字的同步和非同步,以及它們的區別。下面是示例程式的簡單步驟說明 伺服器端 第一步 用指定的埠號和伺服器的ip...
socket 簡單通訊
服務端 1.建立乙個服務端 import socket phone socket.socket 括號內不輸入,預設為family addressfamily.af inet type socketkind.sock stream proto 0 2.為服務端建立ip位址及埠號 phone.bind ...