我打开CMD,并创建一个telnet连接:如何从telnet服务器一次接收多个字符?
telnet localhost 5555
,连接将与服务器打印打开“欢迎光临”,你可以下面的图片
看然而,当我在telnet窗口上键入时,它一次发送一个字符而不是完整的句子(例如,我会输入hello并一次向您发送全球一个字符),如下所示:
SERVEROUTPUT:H SERVEROUTPUT:电子SERVEROUTPUT:L SERVEROUTPUT:L SERVEROUTPUT:○
我想它来发送完整的单词招呼,或者一个完整的句子,而不是一次发送一个字符。
我该怎么做?
下面的代码:
import socket
import sys
from _thread import *
host = ''
port = 5555
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.bind((host, port))
except socket.error as e:
print(str(e))
s.listen(1)
def threaded_client(conn):
conn.send(str.encode('Welcome, type your info\n'))
while True:
print("Waiting for input")
data = conn.recv(1024)
print("Data: ", data)
reply = 'Server output: ' + data.decode('utf-8')
if not data:
break
conn.sendall(str.encode(reply))
conn.close()
while True:
conn, addr = s.accept()
print('connected to: '+addr[0]+':'+str(addr[1]))
start_new_thread(threaded_client, (conn,))
感谢
我认为Telnet一次只发送一个字符,对此您可以做的并不多。要么你可以使用另一个允许这个或者在Python端的Telnet克隆,你可以使用一个缓冲区并等待一个'\ n'字符来分析这条线。 – piertoni
我想你应该配置你的telnet客户端。然而,它不是一个可靠的解决方案,因为TCP(由SOCK_STREAM引用)没有“消息”的概念 - 连接是一个字节流,所以你不能可靠地“分离”消息,即使客户端和服务器愿意这样做。不过,您可以检测换行符并将它们视为消息边界。 – yeputons
我很困惑。您使用telnet客户端与您向我们展示的程序交谈?这很重要。当你不在的时候,它有点令人困惑,建议你正在与一个普通的telnet服务器交谈。 Telnet会在您输入字符时倾向于发送字符,并且Telnet服务器会立即回显它们,因为这样您就可以看到您正在键入的内容。您可以更改您的程序,直到在回显前收到完整的行,但是在telnet客户端上键入的人不会看到他们写的内容。 – tdelaney