本文主要和大家分享php實作socket的方法,主要以文字和程式碼的方式和大家分享,希望能幫助大家。
一、Socket 簡介
1、socket只不過是一個資料結構。
2、使用這個socket資料結構去開始一個客戶端和伺服器之間的會話。
3、伺服器是一直在監聽準備產生一個新的會話。當一個客戶端連接伺服器,它就打開伺服器正在進行監聽的一個連接埠進行會話。
4、伺服器端接受客戶端的連線請求,那就進行一次循環。現在這個客戶端就能夠傳送訊息到伺服器,伺服器也能傳送訊息給客戶端。
二、Socket 變數
產生一個Socket,你需要三個變數:一個協定、一個socket類型和一個公共協定類型。
1、協定
查看原始碼複製到剪下板列印說明
#AF_INET
/ /產生socket的協議,使用TCP或UDP來傳輸,用在IPv4的位址
##//產生socket的協議,使用TCP或UDP來傳輸,用在IPv6的位址
##TCP
3、socket_accept
作用:接受一個Socket連接
用法:socket_accept ( resource socket )
參數:socket,socket resource
#回傳:Returns a new socket resource on success, or FAL
4、socket_connect()
作用:開始一個socket連接
用法:socket_connect ( resource socket, string address [, int port] )
參數:socket,socket resource; address,ip位址;port,連接埠
#5、socket_listen
作用:監聽所有由指定socket的連線
用法:socket_listen ( resource socket [, int backlog] )
參數:socket,socket resource;
##6、socket_read
作用:讀取指定長度的資料
用法:socket_read ( resource socket, int length [, int type] )
參數:socket,socket resource;length,字元長度;type,PHP_BINARY_READ |PHP_NORMAL_READ
返回:string
7、socket_write
socket快取
##7、socket_write
socket快取
#用法:socket_write ( resource socket, string buffer [, int length] )
參數:socket,socket resource;buffer,字元;length,字元長度;
回傳:Boolean
作用:這個函數會傳送資料到已連接的socket
用法:socket_send ( resource socket, string buf, int len, int flags )
參數:socket,socket resource;buf,字元; len,字元長度;
返回:Boolean
作用:取得目前socket的最後錯誤代碼
用法:socket_last_error ( [resource socket] )
參數:socketet ,socket resource;
回傳:int
作用:傳回指定錯誤號碼的詳細錯誤
用法:socket_strerror ( int errno )
參數:errno,socket_last_error no ;
作用:string
作用:關閉一個socket資源
用法:socket_close ( [resource socket] )
參數:socket,socket resource;
#回傳:null
四、使用說明
確認開啟socket方法##
# }else{
# dl('sockets.so');
##
}五、socket程式設計
#1、伺服器端
然後它發送這個數據的接受信息,一旦它接受了信息,就把信息保存到數據裡,並且讓連接的計算機知道這些信息,最後關閉連接。
// 获取协议 $commonProtocol = getprotobyname("tcp"); //产生一个socket $socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol); //把socket绑定在一个IP地址和端口上 socket_bind($socket, 'localhost', 1337); //监听由指定socket的所有连接 socket_listen($socket); //初始化buffer $buffer = "NO DATA"; while(true) { //接受一个Socket连接 $connection = socket_accept($socket); printf("Socket connected\r\n"); // 检测 buffer if($buffer != ""){ printf("Something is in the buffer...sending data...\r\n"); //写数据到socket缓存 socket_write($connection, $buffer . "\r\n"); printf("Wrote to socket\r\n"); }else { printf("No Data in the buffer\r\n"); } //读取指定长度的数据 while($data = socket_read($connection, 1024, PHP_NORMAL_READ)) { $buffer = $data; //写数据到socket缓存 socket_write($connection, "Information Received\r\n"); printf("Buffer: " . $buffer . "\r\n"); } //关闭一个socket资源 socket_close($connection); printf("Closed the socket\r\n\r\n"); }
a 、客戶端連接到伺服器。客戶端讀取資料。
###b、如果這是第一時間到達這個循環的首次連接,這個伺服器將會發送「NO DATA」回傳給客戶端。如果情況發生了,這個客戶端在連線之上。 ######c、客戶端發送它的資料到伺服器,資料發送給伺服器,客戶端等待回應。一旦接受到回應,那麼它將把回應寫到螢幕上。 ######查看原始碼複製到剪切板列印說明#########// 创建 socket $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); //链接 socket $connection = socket_connect($socket,'localhost', 1337); //读取指定长度的数据 while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)) { if($buffer == "NO DATA") { printf("NO DATA"); break; }else{ // 输出 buffer printf("Buffer Data: " . $buffer . ""); } } printf("Writing to Socket"); //写数据到socket缓存 if(!socket_write($socket, "SOME DATA\r\n")){ printf("Write failed"); } //读取指定长度的数据 while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ)){ printf("Data sent was: SOME DATA Response was:" . $buffer . ""); } printf("Done Reading from Socket");
以上是php實作socket的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!