国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP Socket編程起步

2024-05-05 00:11:04
字體:
來源:轉載
供稿:網友

讓我們以一個簡單的例子開始---一個接收輸入字符串,處理并返回這個字符串到客戶端的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
);
//處理客戶端輸入并返回結果
$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
);
?>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 清苑县| 敖汉旗| 资中县| 莆田市| 方正县| 尼勒克县| 兴仁县| 乐安县| 黄浦区| 临沂市| 育儿| 新化县| 济源市| 游戏| 兴宁市| 虹口区| 儋州市| 阿坝| 贵阳市| 台安县| 三亚市| 铜梁县| 吉林市| 句容市| 称多县| 铜川市| 新巴尔虎右旗| 繁昌县| 清徐县| 精河县| 游戏| 浦北县| 建平县| 泾源县| 平和县| 阿瓦提县| 赤壁市| 洛南县| 安平县| 临江市| 堆龙德庆县|