在点击回车键之前,Python服务器回声

时间:2015-12-31 22:49:13

标签: python telnet

我遇到了一个奇怪的问题,我无法弄清楚原因是什么!实际上,我已经用Python编写了一个简单的服务器,无论客户端输入什么内容都可以回复。为了测试它,我通过telnet连接到服务器,但是一旦我输入一个字符,它就会被回复!我不知道怎么阻止它!实际上我想完成一个单词,在按下回车键后,我的服务器回复它。 这是我的简单服务器:

import socket
import sys

HOST = ''   # Symbolic name meaning all available interfaces
PORT = 5000 # Arbitrary non-privileged port

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'

try:
    s.bind((HOST, PORT))
except socket.error , msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()

print 'Socket bind complete'

s.listen(10)
print 'Socket now listening'

#now keep talking with the client
while 1:
    #wait to accept a connection - blocking call
    conn, addr = s.accept()
    print 'Connected with ' + addr[0] + ':' + str(addr[1])

    while True:
        data = conn.recv(1024)
        reply = 'OK...' + data
        if not data: 
            break     
        conn.sendall(reply)

conn.close()
s.close()

1 个答案:

答案 0 :(得分:4)

根据telnet手册页,客户端尝试输入linemode,如果远程服务器不支持,则会回退到字符模式:

  

一旦打开连接,telnet将尝试启用TELNET LINEMODE选项。如果失败,则telnet将恢复为两种输入模式之一:“一次一个字符”或“逐行”,具体取决于远程系统支持的内容。

您可以将服务器端代码更改为与客户端握手以逐行启用,或者您可以强制客户端使用" old"逐行模式,它在本地缓冲字符,并一次性发送它们。

要执行前者,您应该能够在初始连接后将以下字节序列发送为found here

0x255 0x253 0x34

要执行后者,您可以执行(首先按ctrl右括号),这将在telnet客户端中启用此模式(假设您使用的是BSD telnet命令 - 在Windows上可能不同)。

^]toggle localchars