php socket_read()函數的問題

來源:互聯網
上載者:User

伺服器端檔案:socket_server.php:
<?php
phpinfo();

//用WEB開啟的時候為了防止網頁逾時串連,需要設定無限有效
set_time_limit(0);  
/**載入Socket必備的庫*/
if(!extension_loaded('sockets')) {
if(strtoupper(substr(PHP_OS, 3)) == “WIN”) {
dl('php_sockets.dll');
}else{
dl('sockets.so');
}
}  

/**---socket伺服器端產生---*/
$commonProtocol = getprotobyname("tcp");//使用公用協議名字來擷取一個協議類型  
$socket = socket_create(AF_INET,SOCK_STREAM,$commonProtocol);//產生一個socket並且返回一個socket資源的執行個體  
socket_bind($socket, 'localhost', 1339);//綁定socket到本機電腦
socket_listen($socket);//監聽所有進來的socket串連  
/**------END------*/

//初始化緩衝區
$buffer='NO DATA';
while(true){
//產生一個串連
$connection = socket_accept($socket);//其實是一個迴圈等待的過程
if($connection){
printf("Socket connected\r\n");
socket_write($connection, "You are connecting me,My Load.");
} else{
echo socket_strerror();
exit;
}

//檢測緩衝區的內容,有內容就發,沒有內容就不發
if($buffer!=""){
printf("Something is in the buffer...sending data...\r\n");
socket_write($connection,$buffer.";");//將緩衝區內容發送到用戶端
printf("Wrote to socket\r\n");
}else
{
printf("No Data in the buffer\r\n");
}

//從用戶端取得輸入資料並把讀取的資料放進緩衝區中
while($data = socket_read($connection,1024))//socket_read() 讀取指定長度的資料  
{
$buffer = $data;
socket_write($connection,"Information Received\r\n");
printf("Buffer".$buffer."\r\n");
}
//關閉socket串連
socket_close($connection);
printf("Closed the soket\r\n\r\n");
}
?>

用戶端檔案:socket_client.php:
<?php
// Create the socket and connect
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connection = socket_connect($socket,'localhost', 1339);

while(($buffer = socket_read($socket, 10,PHP_BINARY_READ))!==false) {
if($buffer == "NO DATA") {
echo("<p>NO DATA</p>");
break;
}else{
// Do something with the data in the buffer
echo("<p>Buffer Data: " . $buffer . "</p>");
}
}

echo("<p>Writing to Socket</p>");
// Write some test data to our socket
if(!socket_write($socket, "SOME DATA")){
echo("<p>Write failed</p>");
}
// Read any response from the socket
while(($buffer = socket_read($socket, 10,PHP_BINARY_READ))!==false){
echo("<p>Data sent was: SOME DATA<br> Response was:" . $buffer . "</p>");
}
echo("<p>Done Reading from Socket</p>");
?>  
然後用php.exe在命令列執行:
用戶端無法正常顯示全部應該顯示的資訊:
"<p>Done Reading from Socket</p>"這個樣的最後一句話也沒有顯示.
好像是在第一個迴圈的時候卡在socket_read()函數上了,當伺服器端沒有資料的時候,原本以為應該是返回false但是卻在一點反映也沒有了,程式也不往下走了,好像在socket_read中有一個無限迴圈一樣,怎麼回事!我參考了php文檔,有的說返回的是"",有的例子程式說是false,沒有辦法了,求助,上面的現象是怎麼回事?
我的環境是WindowsXP,apache,php5

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.