简单的python telnet客户端/服务器示例不起作用

时间:2016-09-14 19:21:52

标签: python telnetlib

我正在尝试创建模型telnet服务器(用于现有代码的某些功能测试)。现在我只修改了服务器欢迎消息,我试图使用客户端代码读取此消息,但它读取方法在超时时失败,没有其他信息。但是启用pudb调试器后,它大部分时间都可以工作......

我正在使用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> 

我真的很感激有关如何调试此问题的任何提示。谢谢!

1 个答案:

答案 0 :(得分: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()

这将确保打印出所有数据,以便您了解正在进行的操作。

我的理论是,您没有连接,或者您的数据实际上并没有输出"自定义服务器"因此它不会抓住它,或者你的超时时间太短。