2013-09-05 51 views
0

我的路由器有一個API,可以通過Telnet進行連接,除此之外還可以控制一個Tellstick。 我正在使用PHP連接到路由器。 我可以執行命令,但是當我試圖使用socket_read來讀取響應時,我只能看到它的一部分。PHP:socket_read只返回響應的一部分(telnet)

這是連接到使用Windows'telnet功能的路由器時的樣子: http://i.imgur.com/hnIrVQa.png。 對命令ts aliases的響應長度爲幾行。

當我嘗試通過我的PHP腳本獲得該響應時,我只獲得第一行ALIAS=´Hallway´

的代碼我用聽看起來像這樣:

function reply($insocket) { 

    if (false !== ($bytes = socket_read($insocket, 2048, PHP_BINARY_READ))) { 
     return "&nbsp;&nbsp;&nbsp;Reply: <code>$bytes</code> \n<br>"; 
    } else { 
     return "socket_read() failed; reason: " . socket_strerror(socket_last_error($insocket)) . "\n"; 
    } 

    /* 
    while ($out = socket_read($insocket, 2048)) { 
     return $out; 
    } 
    */ 
} 

所有代碼:http://codepad.org/jykGgivv

+0

這聽起來像你期待在一次socket_read()調用中獲取整個消息。使用TCP/IP,流量可能以不可預知的方式分解,並且您可能需要執行幾個socket_read()調用來獲取整個消息。 –

回答

0

也許它超時,嘗試這樣的事情在你的腳本的頂部:

ini_set('default_socket_timeout',300);