2014-04-14 40 views
2

问题是我不知道我会从套接字接收多少字节,所以我只是想循环。如何在Python中连续读取套接字中的数据?

buffer = '' 

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

正如我理解recvfrom返回仅指定的字节和丢弃其它数据的大小,是否有可能以某种方式连续地读取该数据到缓冲器变量?

+0

尝试使用'recv'而不是'recvfrom' –

回答

4

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

我会改变的唯一事情是打破循环的条款:

buffer = '' 

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

空字符串表示的连接根据documentation

如果此代码仍然不工作,那么已经被打破向我们展示如何设置套接字将是一件好事。

+0

仍然是一样的,只有前一个1024 – Kin

+0

你想要读什么? –

+2

Suspect UDP ......... –

1

我建议使用的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)将在没有数据发送时挂起,除非关闭另一端的套接字。

相关问题