以下C#代码在Vista上可以正常运行,但在具有以下功能的XP上则无法运行:
SocketException:提供了无效的参数。
ErrorCode是10022。
XP上的防火墙已被禁用。
using System;
using System.Net;
using System.Net.Sockets;
public class SocketTest
{
[STAThread]
public static void Main()
{
MySocket s = new MySocket();
Console.WriteLine("done");
Console.ReadLine();
}
public class MySocket : Socket
{
public const ushort SocketTtl = 4;
public const string Address = "239.255.255.250";
public IPAddress IPAddress = IPAddress.Parse(Address);
public MySocket()
: base(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
{
SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, SocketTtl);
// This line throws SocketException: An invalid argument was supplied
// SocketException.ErrorCode: 10022
SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress));
}
}
}
有任何想法吗?
最佳答案
在设置SocketOptionName.AddMembership选项之前,需要将套接字绑定(bind)到接口(interface)。
编辑:刚刚在MSDN文档中对此进行了验证(尽管它只说到NT4):
关于C#SocketException与XP上的多播,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/436659/