如何在Python中持续读取套接字数据?
问题是我不知道从套接字会收到多少字节的数据,所以我只是尝试循环读取。
buffer = ''
while True:
data, addr = sock.recvfrom(1024)
buffer += data
print buffer
我理解的是,recvfrom
只会返回指定大小的字节,并且会丢弃其他的数据,那有没有办法可以不断地将这些数据读入一个缓冲区变量呢?
2 个回答
4
我建议使用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
这样做在你想要保持连接而不关闭socket的时候特别有用。
如果没有数据发送,sock.recv(1024)会一直等待,除非你在另一端关闭了socket。
6
它不会丢弃数据,只是会在下一次循环中返回这些数据。你在代码中做的事情是完全正确的。
我唯一想改变的是加一个条件来结束循环:
buffer = ''
while True:
data, addr = sock.recv(1024)
if data:
buffer += data
print buffer
else:
break
一个空字符串表示连接已经断开,这一点在文档中有说明。
如果这段代码还是不工作,那就最好给我们看看你是怎么设置你的套接字的。