因此,当我打开CMD并使用以下命令创建telnet连接时
telnet localhost 5555
正如您在下面的屏幕上看到的那样,它将会出现#34;欢迎" 之后,我输入CMD的每个字符都会立即打印出来/发送。 我的问题是:是,如果是,如何输入消息然后发送它们,所以我收到它们作为1个句子而不是字符char。
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(5) #Enable a server to accept connections.
print("Waiting for a connection...")
def threaded_client(conn):
conn.send(str.encode("Welcome\n"))
while True:
# for m in range (0,20): #Disconnects after x chars
data = conn.recv(2048) #Receive data from the socket.
reply = "Server output: "+ data.decode("utf-8")
print(data)
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,))
答案 0 :(得分:1)
你需要继续阅读直到流结束:
{{1}}
顺便说一句,使用该方法,您一次只能阅读一个字符。您可以根据服务器发送数据的方式进行调整。
答案 1 :(得分:0)
您可以尝试类似:(伪代码)
temp = conn.recv(2048)
data.concatenate(temp) # maybe data = data + temp ???? little rusty
if data[-1] == '\n':
print 'message: ' + data
etc...
答案 2 :(得分:0)
这取决于您是否要在字符模式或行模式下运行。 目前您的代码很好,但您的Windows telnet客户端以字符模式运行。您可以使用putty在线模式下尝试,或者如果您确实需要以char模式运行,则继续读取缓冲区,直到发送换行符。
以下是我运行代码时服务器所说的内容:
Waiting for a connection...
connected to: 127.0.0.1:46738
b'Hello\r\n'
远程登录会议:
telnet 127.0.0.1 5555
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Welcome
Hello
Server output: Hello