我使用socket连接到一个简单的服务器来接收一些数据:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = "X.X.X.X"
port = Y
s.connect((host,port))
data = s.recv(512)
print data
并未收到所有预期收到的数据;其中一些被切断了。因此,我需要对接收的数据执行的任何操作都将被抛弃。
我尝试使用s.settimeout(1)
并将套接字置于非阻塞模式。奇怪的是,它在ipython中运行得很好。
答案 0 :(得分:1)
即使从服务器向客户端发送512字节,如果它们通过多个数据包发送,并且该数据包设置了TCP推送标志,内核将停止缓冲并将数据移交给用户空间,即你的申请。
你应该循环data = s.recv(512)并打印数据。我甚至删除了没用的' 512'
while True:
if not data: break
data = s.recv()
print data