【问题标题】:How to continuously read data from socket in python?如何从python中的socket连续读取数据?
【发布时间】:2014-04-14 09:42:00
【问题描述】:

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

buffer = ''

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

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

【问题讨论】:

  • 尝试使用recv 而不是recvfrom

标签: python sockets


【解决方案1】:

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

我唯一要改变的是一个打破循环的子句:

buffer = ''

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

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

如果此代码仍然无法正常工作,那么最好向我们展示您是如何设置套接字的。

【讨论】:

  • 还是一样,只有前1024
  • 另外,请尝试使用recv 而不是recvfrom
  • 嗯,是的,对不起,Exceptionssetblocking 解决了问题
【解决方案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) 将在没有数据发送时挂起,除非您关闭另一端的套接字。

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 2016-06-26
    • 2022-09-27
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多