[英]Reading all the data from a UDP socket
我有一個綁定到localhost UDP端口33100的sendersocket。我有一個綁定到localhost UDP端口33101的receiverocket套接字。
發送方套接字發送4500字節的數據(字符串“hello man”* 500)。 在接收方,我有一個epoll對象,它等待receiverocket上的EPOLLIN事件。 當有活動時,我會這樣做:
while True:
msg_received = receiver_socket.recv(128)
if msg_received.decode("UTF-8") == "":
break
else:
print msg_received.decode("UTF-8")
主要的問題是,在讀完前128個字節的數據后,我再也看不懂了。 發送方表示它按預期發送了4500字節的數據。
如果發送方再次發送相同的4500字節數據,則再次注冊EPOLLIN事件並讀取新字符串。 不知何故,在我第一次閱讀后,緩沖區被清除了。
現在,即使發送者剛剛發給我的4500個字節的數據,第一recv
給了我128個字節的數據,然后什么都不是recv
版之后。
我可能正在做一些非常愚蠢的事情所以請賜教。 我想收到所有4500字節的數據。
如果您還不知道數據包的大小,則應始終使用65535
(UDP數據包的最大大小)調用recv。 否則,當您調用recv
,整個數據包將被標記為已讀並從緩沖區中清除,但只有前128
個字節被送入msg_received
。
編輯 :當您(如果)轉換為僅通過網絡接收數據時,您可以使用較小的數字進行recv
,如文檔中所述
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.