如何用python从socket中连续读取数据?

2024-10-02 20:32:26 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是我不知道从socket接收多少字节,所以我只是尝试循环。

buffer = ''

while True:
    data, addr = sock.recvfrom(1024)
    buffer += data
    print buffer

据我所知,recvfrom只返回指定大小的字节并丢弃其他数据,是否有可能以某种方式将此数据连续读取到缓冲区变量?


Tags: 数据truedata字节buffer方式socket缓冲区
2条回答

我建议使用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)将挂起,除非您关闭另一端的套接字。

它不会丢弃数据,只会在下一次迭代中返回数据。你在代码中所做的是完全正确的。

我唯一想改变的是一个打破循环的条款:

buffer = ''

while True:
    data, addr = sock.recv(1024)
    if data:
        buffer += data
        print buffer
    else:
        break

空字符串表示连接已根据documentation断开

如果此代码仍然不起作用,那么最好向我们展示如何设置套接字。

相关问题 更多 >