簡體   English   中英

在Python中使用套接字recvfrom接收多播數據

[英]Receiving multicast data with socket recvfrom in Python

我有一個多播服務器發送必須由python客戶端捕獲的數據。 問題是recvfrom不接收任何數據或至少接收第一個數據包並對其進行緩存。 如果我在循環中使用recvfrom,則可以正確接收我的數據。

我的問題是為什么我應該在循環中使用recvfrom來達到預期的行為?

from socket import *

s=socket(AF_INET, SOCK_DGRAM)
s.bind(('172.30.102.141',12345))
m=s.recvfrom(1024)
print m[0]

# sleep for x seconds here

m=s.recvfrom(1024)
print m[0]
# print the exact same thing as previously...

可以肯定的是,多播基本上是在發送UDP程序包,您必須繼續偵聽新程序包。 即使基於TCP協議的通信也是如此。

當您使用低級接口進行網絡通信(例如socket )時,雙方都在定義應用程序級協議。

這意味着,您可以定義接收方如何得出消息完整的結論。 這是因為消息可能會分成通過網絡的多個部分/數據包。 因此,接收方必須以適當的方式組裝它們,然后檢查消息是否完整。 之后,您可以通過處理消息的管道或在接收端執行的任何操作將其向上推送。

當使用UDP,接收方不知道是否有在途中的任何數據包,所以它只是嘗試recvfrom 1024個字節和完成。 它不知道也不應該在意途中是否有更多數據。 這取決於您自己。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM