UdpClient無法在局域網中發送UDP廣播包的解決辦法


問題描述:

在XP或者Win7上面沒有辦法發送UDP廣播報,發送的代碼如下所示,應該沒有問題。

 1         /// <summary>
 2         /// 發送消息
 3         /// </summary>
 4         /// <param name="strDataToSend">要發送的字符串</param>
 5         /// <returns>發送成功與否的標識</returns>
 6         public bool SendMsg(string strDataToSend)
 7         {
 8             if (string.IsNullOrEmpty(strDataToSend)) return false;
 9 
10             UdpClient myUdpClient = new UdpClient();
11             try
12             {
13                 //讓其自動提供子網中的IP廣播地址
14                 IPEndPoint iep = new IPEndPoint(IPAddress.Broadcast, this.netInfo.SendPort);
15                 //將發送內容轉換為字節數組
16                 byte[] bytes = Encoding.UTF8.GetBytes(strDataToSend);
17                 //向子網發送信息
18                 myUdpClient.Send(bytes, bytes.Length, iep);
19                 if (DataSended != null)
20                 {
21 
22                     DataSended(Instance, new SendEventArgs(strDataToSend));
23                 }
24 
25             }
26             catch (Exception err)
27             {
28                 throw err;
29             }
30             finally
31             {
32                 myUdpClient.Close();
33             }
34 
35             return false;
36         }

問題分析:
1、廣播報是否可以發送出去

--我使用抓包工具,iptool。沒有抓到我想要的數據包。但是可以收到別人發過來的廣播包。(如下圖)

                                                                  圖1 抓包

2、是否與特定的電腦的配置有關

--我換了一台電腦,再抓包。發現這次可以抓到我想要的廣播包了,也可以正常接收了。這條電腦是我們局域網內的服務器,一開始懷疑是不是因為防火牆的問題,后面把防火牆都關閉了,但是還是發現不行。后面,就想可能是網卡胚子的問題,打開不能發送廣播包的電腦和可以發送廣播報的主機對比一下,發現不能發送廣播報的主機上都有安裝虛擬機,也有虛擬網卡,嘗試着將所有的虛擬網卡關閉,(如圖2)然后再進行測試,終於都正常了,無論是Win7還是Xp。

                                           圖2 禁用虛擬網卡

 


免責聲明!

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



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