您好,登錄后才能下訂單哦!
今天小編給大家分享一下PHP Socket編程代碼怎么寫的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
讓我們以一個簡單的例子開始---一個接收輸入字符串,處理并返回這個字符串到客戶端的TCP服務.下面是相應的代碼: PHP 代碼: <? // 設置一些基本的變量 $host = "192.168.1.99"; $port = 1234; // 設置超時時間 set_time_limit(0); // 創建一個Socket $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); //綁定Socket到端口 $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); // 開始監聽鏈接 $result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); // accept incoming connections // 另一個Socket來處理通信 $spawn = socket_accept($socket) or die("Could not accept incoming connection\n"); // 獲得客戶端的輸入 $input = socket_read($spawn, 1024) or die("Could not read input\n"); // 清空輸入字符串 $input = trim($input);//將輸入結果寫入ok.php,這句是我加的 fputs(fopen('ok.php','a+'),"$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之間的數字),前提是這個端口未被使用. PHP 代碼: <? // 設置兩個變量 $host = "192.168.1.99"; $port = 1234; ?> 2.在服務器端可以使用set_time_out()函數來確保PHP在等待客戶端連接時不會超時. PHP 代碼: <? // 超時時間 set_time_limit(0); ?> 3.在前面的基礎上,現在該使用socket_creat()函數創建一個Socket了---這個函數返回一個Socket句柄,這個句柄將用在以后所有的函數中. PHP 代碼: <? // 創建Socket $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n"); ?> 第一個參數"AF_INET"用來指定域名; 第二個參數"SOCK_STREM"告訴函數將創建一個什么類型的Socket(在這個例子中是TCP類型) 因此,如果你想創建一個UDP Socket的話,你可以使用如下的代碼: PHP 代碼: <? // 創建 socket $socket = socket_create(AF_INET, SOCK_DGRAM, 0) or die("Could not create socket\n"); ?> 4.一旦創建了一個Socket句柄,下一步就是指定或者綁定它到指定的地址和端口.這可以通過socket_bind()函數來完成. PHP 代碼: <? // 綁定 socket to 指定地址和端口 $result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n"); ?> 5.當Socket被創建好并綁定到一個端口后,就可以開始監聽外部的連接了.PHP允許你由socket_listen()函數來開始一個監聽,同時你可以指定一個數字(在這個例子中就是第二個參數:3) PHP 代碼: <? // 開始監聽連接 $result = socket_listen($socket, 3) or die("Could not set up socket listener\n"); ?> 6.到現在,你的服務器除了等待來自客戶端的連接請求外基本上什么也沒有做.一旦一個客戶端的連接被收到,socket_assept()函數便開始起作用了,它接收連接請求并調用另一個子Socket來處理客戶端--服務器間的信息. PHP 代碼: <? //接受請求鏈接 // 調用子socket 處理信息 $spawn = socket_accept($socket) or die("Could not accept incoming connection\n"); ?> 這個子socket現在就可以被隨后的客戶端--服務器通信所用了. 7.當一個連接被建立后,服務器就會等待客戶端發送一些輸入信息,這寫信息可以由socket_read()函數來獲得,并把它賦值給PHP的$input變量. PHP 代碼: <? // 讀取客戶端輸入 $input = socket_read($spawn, 1024) or die("Could not read input\n"); ?> socker_read的第而個參數用以指定讀入的字節數,你可以通過它來限制從客戶端獲取數據的大小. 注意:socket_read函數會一直讀取殼戶端數據,直到遇見\n,\t或者\0字符.PHP腳本把這寫字符看做是輸入的結束符. 8.現在服務器必須處理這些由客戶端發來是數據(在這個例子中的處理僅僅包含數據的輸入和回傳到客戶端).這部分可以由socket_write()函數來完成(使得由通信socket發回一個數據流到客戶端成為可能) PHP 代碼: <? // 處理客戶端輸入并返回數據 $output = strrev($input) . "\n"; socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n"); ?> 9.一旦輸出被返回到客戶端,父/子socket都應通過socket_close()函數來終止 PHP 代碼: <? // 關閉 sockets socket_close($spawn); socket_close($socket); ?> 今天看到了一個很好的例程,我在例程上加了一句。fputs(fopen('ok.php','a+'),"$input"); 為什么要加這一句,惡搞的本質又出來了。我們在命令行下: nc -vv ip port 然后輸入<?phpinfo();?>后,ok.php就在當前目錄下生成了此文件內容了。要做得更好的一點,完全可以寫一個客戶端的工具實時得到反饋結果,嘿嘿.
以上就是“PHP Socket編程代碼怎么寫”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。