我們程式設計就是按這個順序的,請看下面的圖
//建立乙個連線
$socket=socket_create(af_inet,sock_stream,sol_tcp)or die("cannot create socket\n");
//繫結socket到埠
$result=socket_bind($socket,$host,$port) or die("cannot bind port to socket\n");
//開始監聽這個埠
$result=socket_listen($socket,4) or die("could not set up socket listen\n");
//接受連線,另乙個socket來處理通訊
$msgsock=socket_accept($socket) or die("cannot accept incoming connection\n");
if($msgsock)
//讀取客戶端傳送過來的資訊
$input=socket_read($msgsock,1024) or die("cannot read input\n");
$input=trim($input);
$output=strrev($input)."順序反過來了吧\n";
//對接收到的資訊進行處理,然後返回到客戶端
socket_write($msgsock,$output,strlen($output)) or die("cannot write");
//關閉socket連線
socket_close($msgsock);
socket_close($socket);
?>
<?php
set_time_limit(0);
$host="localhost";
$port=1000;
//建立乙個socket
$socket=socket_create(af_inet,sock_stream,sol_tcp)or die("cannot create socket\n");
$conn=socket_connect($socket,$host,$port) or die("cannot connect server\n");
if($conn)
socket_write($socket,"hello world!") or die("cannot write data\n");
$buffer=socket_read($socket,1024,php_normal_read);
if($buffer)
socket_close($socket);
?>
注意事項: 1 測試socket的時候必須要確定你是否開啟socket擴充套件庫,如果沒有請到php.ini中找到extension_dir=php_sockets.dll,把 前面的分號去掉
2 測試時,在瀏覽器中輸入http://localhost/serversocket.php 和http://localhost/client.php ,現在問題就來了,到底先運 行哪個呢,因為
客戶端要回應,所以我們先執行server再執行client ,這樣你就能看到結果了。
socket函式參考
socket_accept() 接受乙個socket連線
socket_bind() 把socket繫結在乙個ip位址和埠上
socket_clear_error() 清除socket的錯誤或最後的錯誤**
socket_close() 關閉乙個socket資源
socket_connect() 開始乙個socket連線
socket_create_listen() 在指定埠開啟乙個socket監聽
socket_create_pair() 產生一對沒有差別的socket到乙個陣列裡
socket_create() 產生乙個socket,相當於產生乙個socket的資料結構
socket_get_option() 獲取socket選項
socket_getpeername() 獲取遠端類似主機的ip位址
socket_getsockname() 獲取本地socket的ip位址
socket_iovec_add() 新增乙個新的向量到乙個分散/聚合的陣列
socket_iovec_alloc() 這個函式建立乙個能夠傳送接收讀寫的iovec資料結構
socket_iovec_delete() 刪除乙個已分配的iovec
socket_iovec_fetch() 返回指定的iovec資源的資料
socket_iovec_free() 釋放乙個iovec資源
socket_iovec_set() 設定iovec的資料新值
socket_last_error() 獲取當前socket的最後錯誤**
socket_listen() 監聽由指定socket的所有連線
socket_read() 讀取指定長度的資料
socket_readv() 讀取從分散/聚合陣列過來的資料
socket_recv() 從socket裡結束資料到快取
socket_recvfrom() 接受資料從指定的socket,如果沒有指定則預設當前socket
socket_recvmsg() 從iovec裡接受訊息
socket_select() 多路選擇
socket_send() 這個函式傳送資料到已連線的socket
socket_sendmsg() 傳送訊息到socket
socket_sendto() 傳送訊息到指定位址的socket
socket_set_block() 在socket裡設定為塊模式
socket_set_nonblock() socket裡設定為非塊模式
socket_set_option() 設定socket選項
socket_shutdown() 這個函式允許你關閉讀、寫、或指定的socket
socket_strerror() 返回指定錯誤號的周詳錯誤
socket_write() 寫資料到socket快取
socket_writev() 寫資料到分散/聚合陣列
PHP SOCKET程式設計!
server.php php 確保在連線客戶端時不會超時 set time limit 0 設定ip和埠號 address 伺服器自己的ip port 埠號 建立乙個socket if sock socket create af inet sock stream sol tcp 0 繫結到socke...
php socket 程序間通訊
參考 什麼叫協議?上面的這個演示的就是協議!雙方約定了相互交流的口令!你發了 close 字串過來,就代表想中斷通話,故服務端就關閉連線!a.php set time limit 0 host 0.0.0.0 port 10086 建立socket socket socket create af i...
PHP Socket 程式設計詳解
最近在做的專案有一項需要耗時任務在後台執行的功能,雖然php並不是非常適合做常駐後台的守護程序,但是由於專案主要 都是基於php實現,如 果執行在後台的守護程序改換別的語言會非常不方便。所以不可避免會涉及到web端和daemon部分的通訊,socket是乙個不錯的方式。socket的英文原義是 孔 ...