0

我有两个开发平台,一个运行 windows 7 Ultimate(笔记本电脑),一个运行 windows 7 Professional(桌面)。我刚刚检查了我的桌面上的代码,该代码在我的笔记本电脑上完美运行,通过多播发送 udp 数据包(如下),它在我的 Win7 Ultimate 计算机上运行良好,以及我可以测试的 win2k3 服务器和 windows xp 机器它打开了,但是在我的 win7 Pro 盒子上,我收到以下 SocketException “由于系统缺少足够的缓冲区空间或队列已满,无法执行套接字上的操作”

Windows 7 Pro 是否不允许您发送多播数据包?还是我只是错过了什么?

var socket = new UdpClient("239.7.23.1", 6567);
var testBuf = new byte[] {12, 24};
socket.Send(testBuf, 2);

更新:我忘了提到我禁用了所有防火墙,驱动程序是英特尔提供的驱动程序,并且在通过设备的高级属性时,我验证了接收和发送缓冲区都设置为 2048,我已经尝试了上述具有 2 到 256 字节有效负载的测试代码,都具有相同的错误。

4

1 回答 1

1

这有很多可能性,所以虽然我没有具体的答案,但也许它至少有助于解决问题。

首先,代码应该适用于两个系统。

桌面上的 NIC 是否可能更便宜/低端,并且没有为 nic 队列分配尽可能多的缓冲区?这通常是 NIC 型号的特定功能(有点像让 PC 具有 X 数量的 L2 缓存 - 不同的型号有不同的缓存缓冲区)。缓冲区分配中的驱动程序差异如何?你用的是manuf驱动还是微软的?尝试不同的驱动程序和/或将其更新到最新的 manuf 驱动程序而不是 microsoft 的版本(如果您正在使用它)。

您是否确认两个系统上都禁用了防火墙,并且每个系统上的 Windows 防火墙设置不同。它们在不同的路由器上吗?如果是这样,是否有可能在一台路由器上禁用多播,而在另一台路由器上禁用?导致此问题的原因可能很多,因此可能导致此问题的原因可能很多。HTH。

于 2011-04-26T01:11:05.340 回答