簡體   English   中英

連接的udp組播需要在發送方端綁定

[英]connected udp multicast needs bind in the sender side

我有一個模棱兩可的問題,我在兩個用戶之間有一個多播組,其中一個是發送者而另一個是接收者我在每一方做了這些場景:

接收器:

  1. 創建一個udp套接字。
  2. 綁定到組播組地址
  3. 連接到發送方(連接(發送方IP))
  4. 加入組播組
  5. 來自多播組的recv。

發件人:

  1. 創建一個udp套接字。
  2. 發送到組播組。

在上面的這種情況下,當發送方發送數據接收方無法接收但如果我們通過tcpdump檢查接收方,則從組播組接收數據。 但如果接收方沒有連接發送方,則會收到數據。

但實際上,如果我們讓發送方在發送到組播組之前綁定到組播地址,並且接收方連接到發送方,因為上面的方案數據將被成功接收!!!! 我們在發送方添加綁定時的任何解釋???

您可能希望connect(2)發送方的套接字連接到多播組以加快發送速度,但不要connect(2)接收方,因為它將其限制為單播(是的,它有點令人困惑,但它是如何工作的) 。 只需bind(2)接收器bind(2)到組/端口,然后使用IP_ADD_MEMBERSHIP執行setsockopt(2)以加入組。

沒有“連接UDP多播”這樣的東西。 它是連接的還是多播的。 完全刪除connect()步驟。

在接收方,bind()和connect()調用都做同樣的事情:它們將給定的Internet套接字地址與給定的無連接套接字相關聯。 對於bind()調用 - 其中Internet套接字地址是多播組的地址 - 這意味着套接字將僅接收目標地址為多播組的UDP數據包。 對於connect()調用 - 其中Internet套接字地址是發送方的地址 - 這意味着套接字只接收目標地址是發送方的UDP數據包,這不是您想要的。

connect()調用覆蓋bind()調用,導致沒有收到數據包。

使用對組播組connect()調用替換bind()調用,您仍應接收UDP數據包 - 或僅保留bind()調用。 這是你的電話。

暫無
暫無

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

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