2011-05-27 27 views
2

我的代碼是這樣的,但是不工作運輸端點沒有連接

<?php 
    $sock = socket_create(AF_INET, SOCK_STREAM, 0); 
    $sk = socket_connect($sock,"10.0.1.43","1234"); 
    socket_set_nonblock($sock); 

    while (1) {   
     sleep(2); 
     $buffer=socket_read($sock,512); 
     echo "Buffer = $buffer \n"; 
     echo "Last Error = ".socket_last_error($sock).socket_strerror(socket_last_error($sock))."\n";   
    }   
?> 

它顯示錯誤:

無法從套接字讀取[107]:運輸端點沒有連接 PHP堆棧跟蹤: 緩衝區=
上次錯誤= 107Transport端點沒有連接

感謝

回答

2

你必須先接受連接!裏面你while()循環,另做while()這樣的:

while($client = socket_accept($sock)) { 
    $buffer=socket_read($client, 512); 
    echo "Buffer = $buffer \n"; 
} 

它應該工作,你打算。

+0

當你將代碼添加到上面時,我們得到:''Warning:socket_accept():無法接受傳入連接[22]:第9行/share/web/gps/gateway2.php中的無效參數'「,第9行指的是'while($ client = socket_accept($ sock))'。 – trejder 2012-09-13 22:44:40

+1

我相信你沒有定義'$ sock'。這將是這樣''sock = socket_create(AF_INET,SOCK_STREAM,0);' – 2012-09-14 11:36:12

+0

是的!我已經根據[PHP.net頁面]上的PHP示例(http://php.net/manual/en/sockets.examples.php)自己弄明白了這一點。我甚至發佈了更正(修復了一些錯誤)和更新的示例,但在PHP.net的白癡已經刪除它沒有任何通知。 – trejder 2012-09-16 05:59:19

1

OK,所以客戶端套接字未連接。

什麼是協議'0'?你確定系統上的'0'是TCP嗎? 不確定在connect()之後是否可以更改套接字塊/非塊狀態 - 從未嘗試過這樣的事情。 如果$ sk爲false,那麼最後一個錯誤是什麼? 服務器在10.0.1.43:1234可以通過TCP到達嗎?

RGDS, 馬丁

+0

我的ip可以訪問,我已testing.Now它通過編輯一些代碼工作正常。但仍然不工作,當我從另一個系統運行此URL。 – 2011-06-02 05:57:13

0

正如我在以前的答案評論中寫道,你可以找到PHP.net Examples Page解決這一問題的很好的例子。在主要文章中,您將找到一個很好的例子,如何讓聽衆沒有錯誤,您是指一個客戶,並且在下面的javier的通知中,如何爲多客戶端目的提供相同的服務。