如何排除故障:Socket.Poll返回false?

时间:2012-03-19 12:12:35

标签: c# .net udp multicast

已解决我已解决了关闭Windows防火墙的问题

我在两台不同的计算机上运行相同的代码。

s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
ipep = new IPEndPoint(IPAddress.Any, int.Parse(mcastPort));
s.Bind(ipep);

// setting options
// ................
// s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddSourceMembership, option);

if (s.Poll(1, SelectMode.SelectRead))
{
    Console.WriteLine("Poll returned true");
} else
{
    Console.WriteLine("Poll returned false");
}

在一台计算机上,代码运行正常,所以至少它有效。 但是在另一台计算机上它不起作用。在一种情况下Poll返回true,而在另一种情况下Poll返回false;我使用Wireshark来检查两台计算机上是否可以看到指定连接上的数据报(mcastGroup,mcastPort,sourceIp)。我当时认为可能在第二台计算机上使用了错误的界面,因此我将new IPEndPoint(IPAddress.Any...替换为new IPEndPoint(IPAddress.Parse("10.11.12.13")...,但这没有帮助。

我能看到的唯一区别。在程序运行的计算机上,我只能在程序启动时看到数据报。在程序不起作用的计算机上,我总是看到数据报,即使应用程序已关闭。

问题是 - 我怎么能解决这个问题?

  • 我确信网络中有数据报,因为我在wireshark中看到它们
  • 我确定我的应用程序和wireshark使用相同的multicastGroup,multicastPort,sourceIp
  • 我确定我使用相同的界面,因为我明确提供了

Socket.Poll仍然返回false。我还应该做什么?

upd 此外,我在嗅探器中注意到无法使用的计算机使用IGMP v2,而运行正常的计算机使用IGMP V3。功能AddSourceMembership可能是IGMP v3的新功能,这就是我的程序不起作用的原因?如何强制计算机使用IGMP v3?

upd 我创建了另一个问题https://stackoverflow.com/questions/9775405/the-same-udp-multicast-addsourcemembership-code-results-in-completely-different因为我认为这不是c#或.net问题

0 个答案:

没有答案