如何在python中从socket继续读取数据?

时间:2014-04-14 09:42:00

标签: python sockets

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

buffer = ''

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

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

2 个答案:

答案 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)将挂起。