2016-09-14 94 views
0

我正在嘗試創建模型遠程登錄服務器(用於對現有代碼的某些功能測試)。現在我只修改了服務器的歡迎信息,並且正在嘗試使用客戶端代碼讀取此消息,但是它的讀取方法在超時沒有附加信息時會失敗。但隨着啓用pudb調試器它大多數時間工作...簡單的python telnet客戶端/服務器示例不起作用

我正在使用virtualenv,使用pip安裝pudb和telnetsrv。 Python 2.7.12,Ubuntu 16.04。

服務器代碼:

import SocketServer 
from telnetsrv.threaded import TelnetHandler 

class MyHandler(TelnetHandler): 

    WELCOME = "HI from custom server" 

class TelnetServer(SocketServer.TCPServer): 
    allow_reuse_address = True 

server = TelnetServer(("0.0.0.0", 8023), MyHandler) 
server.serve_forever() 

客戶機代碼:

import telnetlib 

HOST = '127.0.0.1' 
PORT = 8023 
# from pudb import set_trace; set_trace() 
tn = telnetlib.Telnet(HOST, PORT) 

data = tn.read_until("custom server", timeout=1) 
print "Data: " + data 

tn.close() 

客戶端輸出:

$ python client.py 
Data: 

與pudb客戶端輸出允許(與步驟一步執行)

$ python client.py 
Data: HI from custom server 

當然,當我執行shell telnet命令,這一切工作正常:

$ telnet 127.0.0.1 8023 
Trying 127.0.0.1... 
Connected to 127.0.0.1. 
Escape character is '^]'. 
HI from custom server 
Telnet Server> 

我會很感激如何調試這個問題的任何提示。謝謝!

回答

0

確保有實際連接正在進行。要做到這一點放編輯您的代碼中加入tn.set_debuglevel(100)到你的腳本是這樣的:

import telnetlib 

HOST = '127.0.0.1' 
PORT = 8023 
# from pudb import set_trace; set_trace() 
tn = telnetlib.Telnet(HOST, PORT) 
tn.set_debuglevel(100) 
data = tn.read_until("custom server", timeout=1) 
print "Data: " + data 

tn.close() 

這將確保所有的數據都打印出來,所以你可以看到發生了什麼事情。

我的理論是,你沒有連接,或者你的數據實際上並沒有輸出「自定義服務器」,因此它不會捕獲它,或者你的超時時間太短。