2015-06-25 26 views
1

我試圖從Lua使用LuaSocket從一個telnet連接接收信息。除了當我收到時,如果我收到的任何內容少於5秒鐘的最大字節數,我已經完成了所有這些工作。如果我收到的任何內容超過了屏幕上的字節數,則會花費半個多小時。如何做一個操作,如果它在6秒內沒有完成就停止它?

我目前的解決方案的想法是嘗試接收實例750字節,然後如果6-7秒內無法工作,700字節,然後650等,直到我可以很快收到它。我需要解析信息並找到兩個特定的短語,所以如果可以在我的telnet連接內部執行此操作,並返回該信息,而不是整個屏幕,那麼也可以。我也並不需要所有這些,但我需要儘可能多的收到的信息來提高我的信息在其中的可能性,因此爲什麼在我的例子中我只減少了50。

我找不到任何功能,允許您開始閱讀某些內容(執行功能),然後在一定的時間間隔後退出。如果有人知道如何做到這一點,或者有任何其他解決方案來解決我的問題,請讓我知道! :) 謝謝!

這裏是我需要重複:

信息= CONN:接收(X)

與X每次花費超過6秒的時間,完成時間遞減。

+0

'conn:settimeout(0,'b')'help?除此之外,它似乎是你試圖做非常緩衝的非阻塞io錯誤的方式。 – user3125367

回答

0

您提出的解決方案看起來有點奇怪,因爲有更直接的方法來處理異步通信。首先,您可以使用settimeout來限制sendreceive調用將等待結果的時間量(請注意,因爲receive可能會在此情況下返回部分結果)。第二種選擇是使用select,它允許您在發出阻塞命令之前檢查套接字是否有讀/寫的內容。

+0

謝謝你和其他人。 settimeout是我正在尋找我欣賞! –

+0

如果它適合你,你可能想接受答案。 –

相關問題