關於組播數據包“發不出去",c#無法接收


問題一:發不出去

  最近做一個小東西改進方案需要用到組播,簡單來說就是我先作為服務器端組播發送設備編號,然后組播成員作為客戶端接收消息后先確認對方是不是在呼叫我。是的話就返回一個消息,這樣我服務器端就可以知道客戶端的IP地址,從而建立TCP連接。

  但是在這個過程中一波三折。。。

  windows下發送組播消息,樹莓派卻無法接收到這個組播消息,然后使用wireshark抓包看看數據包發出去沒有,結果也沒看見往這個組播地址發送的消息。納尼?我的數據包被誰偷吃了嗎!!!然后上網找解決方案,關閉防火牆,設置端口,設置出入站規則等,然而發現並沒有什么卵用~~~這就很煩躁了,我的數據包呢!

  苦尋答案無果,偶然的機會,看到可以查最近加入的組播組(netsh interface ipv4 show joins),然后發現了罪惡之源!

       ——————華麗的分割線————————

  電腦會存在很多虛擬網卡,在發送組播消息的時候通過其他虛擬網卡發送出去了!而這邊樹莓派不在這個網段之類!當然收不到這個組播數據包! 原來是你!偷吃了我的蛋糕!

 

   好吧!關掉關掉關掉!只留下同一子網下的網卡就好了!OK!大功告成!

 

問題二:無法接收

  這邊作為客戶端,收到消息后確認是在叫我當然要禮貌性的回復消息啦!UDP接收消息后會知道發送端的地址,我的做法就按照這個地址返回一個UDP數據包!

  那么問題又來了,我接收不到!(因為我兩端都用C語言寫的時候是實現了這個功能的,因為項目原因客戶端代碼是C語言,服務器端是C#,所以這邊改為C#)為什么!這么點東西要這么折磨我!開始以為我的代碼寫錯了(好吧,估計就是我的代碼寫錯了),網上各種找,各種試驗也不行啊!

  好像說C#這邊接收不能接收不知道對端IP的數據包(真實性有待考察),C和C#不是親戚嗎?為什么你大哥行你就不行(好像不是親戚)。。。

  沒辦法,改變策略。

  解決方案:

  這邊返回消息也用組播方式,這邊也用組播方式接收消息。好吧,這樣總行了吧!

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM