问题是我不知道我会从套接字接收多少字节,所以我只是想循环。如何在Python中连续读取套接字中的数据?
buffer = ''
while True:
data, addr = sock.recvfrom(1024)
buffer += data
print buffer
正如我理解recvfrom
返回仅指定的字节和丢弃其它数据的大小,是否有可能以某种方式连续地读取该数据到缓冲器变量?
问题是我不知道我会从套接字接收多少字节,所以我只是想循环。如何在Python中连续读取套接字中的数据?
buffer = ''
while True:
data, addr = sock.recvfrom(1024)
buffer += data
print buffer
正如我理解recvfrom
返回仅指定的字节和丢弃其它数据的大小,是否有可能以某种方式连续地读取该数据到缓冲器变量?
它不会丢弃数据,它只会在下一次迭代中返回数据。你在代码中做什么是完全正确的。
我会改变的唯一事情是打破循环的条款:
buffer = ''
while True:
data, addr = sock.recv(1024)
if data:
buffer += data
print buffer
else:
break
空字符串表示的连接根据documentation
如果此代码仍然不工作,那么已经被打破向我们展示如何设置套接字将是一件好事。
我建议使用的ReadLine作为缓冲和使用“\ n”作为行之间的分隔符:
#read one line from the socket
def buffered_readLine(socket):
line = ""
while True:
part = socket.recv(1)
if part != "\n":
line+=part
elif part == "\n":
break
return line
如果要在不关闭套接字来缓冲,这是很有帮助。
sock.recv(1024)将在没有数据发送时挂起,除非关闭另一端的套接字。
尝试使用'recv'而不是'recvfrom' –