中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP?Socket編程代碼怎么寫

發布時間:2022-10-18 16:44:22 來源:億速云 閱讀:84 作者:iii 欄目:編程語言

今天小編給大家分享一下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編程代碼怎么寫”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达孜县| 若羌县| 遵义县| 平顶山市| 洪洞县| 澎湖县| 印江| 六安市| 且末县| 炎陵县| 南投县| 高邮市| 万宁市| 奇台县| 桐梓县| 辰溪县| 喜德县| 南宫市| 安乡县| 淮南市| 芮城县| 华亭县| 蓬莱市| 忻城县| 铁岭县| 涪陵区| 四子王旗| 景谷| 西峡县| 慈溪市| 克拉玛依市| 江口县| 大荔县| 汶川县| 桓仁| 辽宁省| 石景山区| 穆棱市| 昔阳县| 信阳市| 余干县|