案例一:**詳解
// 設定一些基本的變數
$host = "192.168.1.99";
$port = 1234;
// 設定超時時間
set_time_limit(0);
// 建立乙個socket
$socket = socket_create(af_inet, sock_stream, 0) or die("could not createsocket\n");
//繫結socket到埠
$result = socket_bind($socket, $host, $port) or die("could not bind tosocket\n");
// 開始監聽鏈結
$result = socket_listen($socket, 3) or die("could not set up socketlistener\n");
// accept incoming connections
// 另乙個socket來處理通訊
$spawn = socket_accept($socket) or die("could not accept incomingconnection\n");
// 獲得客戶端的輸入
$input = socket_read($spawn, 1024) or die("could not read input\n");
// 清空輸入字串
$input = trim($input);
//處理客戶端輸入並返回結果
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen ($output)) or die("could not write
output\n");
// 關閉sockets
socket_close($spawn);
socket_close($socket);
下面是其每一步驟的詳細說明:
1.第一步是建立兩個變數來儲存socket執行的伺服器的ip位址和埠.你可以設定為你自己的伺服器和埠(這個埠可以是1到65535之間的數字),前提是這個埠未被使用.
[copy to clipboard]
php code:
// 設定兩個變數
$host = "192.168.1.99";
$port = 1234;
2.在伺服器端可以使用set_time_out()
函式來確保php在等待客戶端連線時不會超時.
[copy to clipboard]
php code:
// 超時時間
set_time_limit(0);
3.在前面的基礎上,現在該使用socket_creat()函式建立乙個socket了—這個函式返回乙個socket控制代碼,這個控制代碼將用在以後所有的函式中.
[copy to clipboard]
php code:
// 建立socket
$socket = socket_create(af_inet, sock_stream, 0) or die("could not create
socket\n");
第乙個引數」af_inet」用來指定網域名稱;
第二個引數」sock_strem」告訴函式將建立乙個什麼型別的socket(在這個例子中是tcp型別)
因此,如果你想建立乙個udp socket的話,你可以使用如下的**:
[copy to clipboard]
php code:
// 建立 socket
$socket = socket_create(af_inet, sock_dgram, 0) or die("could not create
socket\n");
[copy to clipboard]
php code:
//繫結 socket to 指定位址和埠
$result = socket_bind($socket, $host, $port) or die("could not bind to
socket\n");
5.當socket被建立好並繫結到乙個埠後,就可以開始監聽外部的連線了.php允許你由socket_listen()函式來開始乙個監聽,同時你可以指定乙個數字(在這個例子中就是第二個引數:3)
[copy to clipboard]
php code:
// 開始監聽連線
$result = socket_listen($socket, 3) or die("could not set up socket
listener\n");
6.到現在,你的伺服器除了等待來自客戶端的連線請求外基本上什麼也沒有做.一旦乙個客戶端的連線被收到,socket_accept()函式便開始起作用了,它接收連線請求並呼叫另乙個子socket來處理客戶端–伺服器間的資訊.
[copy to clipboard]
php code:
//接受請求鏈結
// 呼叫子socket 處理資訊
$spawn = socket_accept($socket) or die("could not accept incoming
connection\n");
這個子socket現在就可以被隨後的客戶端–伺服器通訊所用了.
7.當乙個連線被建立後,伺服器就會等待客戶端傳送一些輸入資訊,這寫資訊可以由socket_read()函式來獲得,並把它賦值給php的$input變數.
[copy to clipboard]
php code:
// 讀取客戶端輸入
$input = socket_read($spawn, 1024) or die("could not read input\n");
?>
socker_read的第而箇引數用以指定讀入的位元組數,你可以通過它來限制從客戶端獲取資料的大小.
注意:socket_read函式會一直讀取殼戶端資料,直到遇見\n,\t或者\0字元.php指令碼把這寫字元看做是輸入的結束符.
8.現在伺服器必須處理這些由客戶端發來是資料(在這個例子中的處理僅僅包含資料的輸入和回傳到客戶端).這部分可以由socket_write()函式來完成(使得由通訊socket發回乙個資料流到客戶端成為可能)
[copy to clipboard]
php code:
// 處理客戶端輸入並返回資料
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen ($output)) or die("could not write
output\n");
9.一旦輸出被返回到客戶端,父/子socket都應通過socket_close()函式來終止
[copy to clipboard]
php code:
// 關閉 sockets
socket_close($spawn);
socket_close($socket);
php簡單實現socket通訊
socket通訊的原理在這裡就不說了,它的用途還是比較廣泛的,我們可以使用 socket 來做乙個 api介面出來,也可以使用 socket 來實現兩個程式之間的通訊,我們來研究一下在 php開發 中如何實現socket通訊。由於socket服務端的 要監聽埠,等待接收請求,所以 php在做 soc...
socket網路通訊《二》
socket網路通訊 本文注意基於socket來分析tcp連線建立過程。先回顧一下tcp連線建立過程 主機a執行的是tcp客戶端程式,主機b執行的是tcp伺服器程式,最初兩端tcp程序處於closed態,a主動開啟連線,對應客戶端connect函式發起連線,b被動接受連線,對應於伺服器listen函...
php 例項說明 socket通訊機制
一.socket是什麼 什麼是socket 所謂socket通常也稱作 套接字 用於描述ip位址和埠,是乙個通訊鏈的控制代碼。應用程式通常通過 套接字 向網路發出請求或者應答網路請求。說白了就是一種通訊機制。它類似於銀行,電信啊這些部分的 客服部門。你打 的時候,那邊會分配置乙個人回答你的問題,客服...