[英]Python 3 Sockets - Receiving more then 1 character
因此,当我打开CMD并使用以下命令创建telnet连接时:
telnet本地主机5555
如下面的屏幕所示,它将出现“欢迎”字样。 之后,我键入CMD的每个字符都会立即打印/发送。 我的问题是:是的,如果是的话,如何键入消息然后发送给我,所以我以1句话而不是逐字符地接收它们。
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,))
您需要继续阅读直到流结束:
string = ""
while True:
# for m in range (0,20): #Disconnects after x chars
data = conn.recv(1) #Receive data from the socket.
if not data:
reply = "Server output: "+ string
conn.sendall(str.encode(reply))
break
else:
string += data.decode("utf-8")
conn.close()
顺便说一句,使用该方法,您一次将读取一个字符。 您可以使其适应服务器发送数据的方式。
这取决于您要在字符模式还是行模式下运行。 目前,您的代码很好,但是Windows telnet客户端以字符模式运行。 您可以使用腻子在行模式下进行尝试,或者如果您确实需要在char模式下运行,则继续读取缓冲区,直到发送换行符为止。
这是我运行您的代码时服务器所说的:
Waiting for a connection...
connected to: 127.0.0.1:46738
b'Hello\r\n'
telnet会话beeing:
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
您可以尝试执行以下操作:(伪代码)
temp = conn.recv(2048)
data.concatenate(temp) # maybe data = data + temp ???? little rusty
if data[-1] == '\n':
print 'message: ' + data
etc...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.