Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python3套接字_Python 3.x_Sockets - Fatal编程技术网

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服务器进行复制,因为这些服务器的行为不同。所以你最好问问真正的问题,而不是你的游戏问题。