2014-04-14 75 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)將在沒有數據發送時掛起,除非關閉另一端的套接字。

相關問題