Python 3.x Python3套接字
这可能是一个非常愚蠢的问题,但我不明白为什么下面的代码不起作用:Python 3.x Python3套接字,python-3.x,sockets,Python 3.x,Sockets,这可能是一个非常愚蠢的问题,但我不明白为什么下面的代码不起作用: import socket host = "127.0.0.1" port = 23 mySocket = socket.socket() mySocket.connect((host,port)) messages = [b"test",b"test2"] for msg in messages: mySocket.sendall(msg) data = mySocket.recv(1024).decode
import socket
host = "127.0.0.1"
port = 23
mySocket = socket.socket()
mySocket.connect((host,port))
messages = [b"test",b"test2"]
for msg in messages:
mySocket.sendall(msg)
data = mySocket.recv(1024).decode(errors="ignore")
print("Received from server :" + data)
mySocket.close()
我将只收到对第一个请求的响应。第二个请求被发送(我与Wireshark进行了检查),但我没有得到任何答复(Wireshark中没有回复包),脚本被卡住了
如果要发送多条消息,应如何继续
任何暗示都值得赞赏,
谢谢,服务器是否发送回消息完全取决于您所连接的服务器(在本例中,可能是基于端口的telnet守护进程),客户端无法强制服务器发送回复。您正在假设服务器的特定行为,而您所连接的服务器没有。我理解。但它应该会发回一些东西(与第一个回复相同)。那为什么不呢?我怀疑这与我编写它的方式有关(与TCP内部结构有关),并且这不是正确的方式。是什么让你确信服务器应该发回一些东西?如果我在一个测试服务器上运行你的代码,而这个测试服务器实际上会发回一些东西,那么它工作得非常好。所以问题不在于你的代码,而在于你对服务器行为的错误假设。因为这两个请求完全相同,所以我假设它应该响应两次。为什么它只回答一个请求而不回答另一个请求(moody服务器:P)?更严重的是,我在一个实际应用程序中遇到了同样的问题(该应用程序应该响应一个请求,而在专用客户机上没有),我在telnet中复制了这个问题,只是为了能够将它发布到StackOverflow上。您假设您连接的服务器与web服务器一样工作,即相同的请求结果(大多数情况下)同样的回答。但这种行为是特定于web服务器的,不适用于任何任意服务器,尤其不适用于telnet服务器。而且,您不能简单地将web服务器的问题与telnet服务器进行复制,因为这些服务器的行为不同。所以你最好问问真正的问题,而不是你的游戏问题。