使用python套接字时接收所有数据

时间:2014-09-20 21:47:30

标签: python sockets networking

我使用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中运行得很好。

1 个答案:

答案 0 :(得分:1)

即使从服务器向客户端发送512字节,如果它们通过多个数据包发送,并且该数据包设置了TCP推送标志,内核将停止缓冲并将数据移交给用户空间,即你的申请。

你应该循环data = s.recv(512)并打印数据。我甚至删除了没用的' 512'

while True:
    if not data: break
    data = s.recv()
    print data