我正在尝试构建一个 python 客户端来与我的 C 服务器交互。这是客户端的代码:
import socket
s = socket.socket()
s.connect(("127.0.0.1", 12209))
print "preparing to send"
s.send("2")
s.send("mmm2.com")
s.send("mypwd")
s.send("5120")
print "Sent data"
root = s.recv(256)
print root
当然,当我在交互式 shell(GUI IDLE)上逐行运行这段代码时,一切都运行得很好。但是,当我将这段代码保存在一个文件中并尝试运行它时,它挂起并停止根据 Windows 响应,我只是没有做什么?
最佳答案
如果您逐行输入,发送的字符串可能会在单独的 recv()
调用中一个接一个地被服务器接收。
当您在脚本中执行它时,所有的 send()
调用都会立即在彼此之后运行而不会延迟,并且服务器可能会在单个 recv 中批量接收所有数据()
调用。所以服务器会看到“2mmm2.commypwd5120”,并且可能无法正确处理。它可能会等待来自客户端的更多输入。
您需要在值之间进行一些明确的分隔,例如换行符,以便服务器可以正确解析接收到的数据。
关于c - shell 和文件代码中的 python 套接字差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508019/