php socket編程通訊

  • 今天終於測試成功了php中的socket通訊,先看原理圖


  • 這裏能夠清晰的看到socket究竟是在網絡模型中的哪一個位置,還有與端口的形象表示

咱們編程就是按這個順序的,請看下面的圖 php

  • 這下咱們好寫程序了,先看Server端   保存爲serverSocket.php
  1. <span style="font-size:14px;color:#996633;"><?php  
  2.     set_time_limit(0);  
  3.     $host="localhost";  
  4.     $port=1000;  
  5.       
  6.     //建立一個鏈接  
  7.     $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)or die("cannot create socket\n");  
  8.     //綁定socket到端口  
  9.     $result=socket_bind($socket,$host,$portor die("cannot bind port to socket\n");  
  10.     //開始監聽這個端口  
  11.     $result=socket_listen($socket,4) or die("could not set up socket listen\n");  
  12.     //接受鏈接,另外一個socket來處理通訊  
  13.     $msgsock=socket_accept($socketor die("cannot accept incoming connection\n");  
  14.     if($msgsock){  
  15.         echo date("Y-m-d H:i:s D a");  
  16.     }  
  17.     //讀取客戶端發送過來的信息  
  18.     $input=socket_read($msgsock,1024) or die("cannot read input\n");  
  19.     $input=trim($input);  
  20.     $output=strrev($input)."順序反過來了吧\n";  
  21.     //對接收到的信息進行處理,而後返回到客戶端  
  22.     socket_write($msgsock,$output,strlen($output)) or die("cannot write");  
  23.     //關閉socket鏈接  
  24.     socket_close($msgsock);  
  25.     socket_close($socket);  
  26.   
  27. ?></span>  

  • 再來看Client客戶端的代碼  保存爲client.php
  1. <span style="font-size:14px;color:#996633;"><?php  
  2.     set_time_limit(0);  
  3.     $host="localhost";  
  4.     $port=1000;  
  5.       
  6.     //建立一個socket  
  7.     $socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)or die("cannot create socket\n");  
  8.     $conn=socket_connect($socket,$host,$portor die("cannot connect server\n");  
  9.     if($conn){echo "client connect ok!";}  
  10.     socket_write($socket,"hello world!"or die("cannot write data\n");  
  11.     $buffer=socket_read($socket,1024,PHP_NORMAL_READ);  
  12.     if($buffer){  
  13.         echo "response was:".$buffer."\n";  
  14.     }             
  15.     socket_close($socket);  
  16. ?></span>  

注意事項:  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() 寫數據到分散/聚合數組
相關文章
相關標籤/搜索