問題是我不知道我會從套接字接收多少字節,所以我只是想循環。如何在Python中連續讀取套接字中的數據?
buffer = ''
while True:
data, addr = sock.recvfrom(1024)
buffer += data
print buffer
正如我理解recvfrom
返回僅指定的字節和丟棄其它數據的大小,是否有可能以某種方式連續地讀取該數據到緩衝器變量?
問題是我不知道我會從套接字接收多少字節,所以我只是想循環。如何在Python中連續讀取套接字中的數據?
buffer = ''
while True:
data, addr = sock.recvfrom(1024)
buffer += data
print buffer
正如我理解recvfrom
返回僅指定的字節和丟棄其它數據的大小,是否有可能以某種方式連續地讀取該數據到緩衝器變量?
它不會丟棄數據,它只會在下一次迭代中返回數據。你在代碼中做什麼是完全正確的。
我會改變的唯一事情是打破循環的條款:
buffer = ''
while True:
data, addr = sock.recv(1024)
if data:
buffer += data
print buffer
else:
break
空字符串表示的連接根據documentation
如果此代碼仍然不工作,那麼已經被打破向我們展示如何設置套接字將是一件好事。
我建議使用的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)將在沒有數據發送時掛起,除非關閉另一端的套接字。
嘗試使用'recv'而不是'recvfrom' –