讓我們以一個簡單的例子開始---一個接收輸入字串,處理並返回這個字串到客戶端的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之間的數字),前提是這個連接埠未被使用.
<? // 设置两个变量 $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或者

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver CS6
視覺化網頁開發工具

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版