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 禁用虚拟网卡

 本文转自陈哈哈博客园博客,原文链接http://www.cnblogs.com/kissazi2/archive/2012/12/07/2806533.html如需转载请自行联系原作者


kissazi2

相关文章
|
6月前
|
监控 API 数据处理
局域网监控软件中基于UDP协议的数据传输代码实现
本文介绍了在局域网监控系统中,使用UDP协议进行数据传输的实现。示例代码展示了如何用Python创建UDP套接字,接收并处理监控数据。处理后的数据可通过网站API自动提交到网站,例如利用requests库发送HTTP POST请求。这种方法便于实现监控数据的自动化提交和展示,提升效率与安全性。
194 7
|
5天前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
5月前
|
存储 网络协议 数据处理
【Socket】解决UDP丢包问题
UDP(用户数据报协议)是一种无连接的传输层协议,因其不保证数据包的顺序到达和不具备内置重传机制,导致在网络拥塞、接收缓冲区溢出或发送频率过快等情况下容易出现丢包现象。为应对这些问题,可以在应用层实现重传机制、使用前向纠错码等方法。这些方法在一定程度上可以缓解UDP通信中的丢包问题,提高数据传输的可靠性和效率。
|
6月前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver
|
6月前
【DPDK 】dpdk测试发udp包
【DPDK 】dpdk测试发udp包
|
缓存 网络协议 C++
|
缓存 网络协议 算法
【Python基础篇021】黏包现象丨udp的socket服务
【Python基础篇021】黏包现象丨udp的socket服务
10960 0
|
网络协议 网络性能优化 安全
用户数据包协议(user datagram protocol)——UDP
用户数据报协议(User Datagram Protocol,UDP)是无连接不可靠传输层协议。它不提供主机到主机通信,它除了提供进程到进程之间的通信之外,就没有给 IP 服务增加任何东西。
1685 0
|
网络协议 网络安全 网络性能优化
TCP/UDP区别&&心跳包机制
UDP:用户数据报协议:主要用在实时性要求比较高的以及对质量相对较弱的地方.但是面对现在高质量的线路不会容易丢包,除非是一些拥塞条件下,如流媒体 TCP:传输控制协议:是面连接的那么运行环境必然要求其可靠性不可丢包,有良好的拥塞控制机制如 http ...
2327 0