问题是我不知道我将从socket接收多少字节,所以我只想尝试循环。
buffer = ''
while True:
data, addr = sock.recvfrom(1024)
buffer += data
print buffer
据我所知recvfrom
只返回指定的字节大小而丢弃其他数据,是否有可能以某种方式连续读取此数据以缓冲变量?
答案 0 :(得分:4)
它不会丢弃数据,它只会在下一次迭代中返回数据。您在代码中所做的完全正确。
我唯一要改变的是打破循环的条款:
buffer = ''
while True:
data, addr = sock.recv(1024)
if data:
buffer += data
print buffer
else:
break
空字符串表示根据documentation
断开连接如果此代码仍不起作用,那么向我们展示如何设置套接字会很好。
答案 1 :(得分:3)
我建议使用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)将挂起。