問題描述:
在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 禁用虛擬網卡