C#-SocketOptionName.AddSourceMembership未知、无效或不受支持

C#-SocketOptionName.AddSourceMembership未知、无效或不受支持,c#,multicast,C#,Multicast,我试图在c#中实现一些特定于源的多播(主要是在不冒任何冲突的风险的情况下在互联网上自由选择任何组地址)。我遵循了这个方法,但我一直遇到一个错误: getsockopt或setsockopt调用中指定了未知的无效或不受支持的选项或级别 这是一个典型的错误,例如,当您指定与SocketOptionName不一致的SocketOptionLevel时。但我检查了一下是否使用了SocketOptionLevel.IP,这是多播选项的正确选择。我还尝试了其他的方法,它们也会产生同样的错误。 你知道还有什么

我试图在c#中实现一些特定于源的多播(主要是在不冒任何冲突的风险的情况下在互联网上自由选择任何组地址)。我遵循了这个方法,但我一直遇到一个错误:

getsockopt或setsockopt调用中指定了未知的无效或不受支持的选项或级别

这是一个典型的错误,例如,当您指定与SocketOptionName不一致的SocketOptionLevel时。但我检查了一下是否使用了SocketOptionLevel.IP,这是多播选项的正确选择。我还尝试了其他的方法,它们也会产生同样的错误。 你知道还有什么会引起这个异常,或者我做错了什么吗

这是我的密码:

mySocket = UdpClient(localEndPoint);

Buffer.BlockCopy(multicastGroupAddress.GetAddressBytes(), 0, membershipAddresses, 0, 4);
Buffer.BlockCopy(remoteEndPoint.Address.GetAddressBytes(), 0, membershipAddresses, 4, 4);
Buffer.BlockCopy(localEndPoint.Address.GetAddressBytes(), 0, membershipAddresses, 8, 4);

mySocket.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddSourceMembership, membershipAddresses);
(是的,显然是从链接复制的,我仍在努力使其工作)


谢谢

我得到了以下代码:

Socket mySocket = new Socket(AddressFamily.InterNetwork,
                     SocketType.Dgram,
                     ProtocolType.Udp);

// Join or create a multicast group
IPAddress multicastGroupAddress = IPAddress.Parse("224.1.1.1");

EndPoint localEndPoint  = (EndPoint)new IPEndPoint(IPAddress.Any, 2000);
mySocket.Bind(localEndPoint);
MulticastOption mcastOption = new MulticastOption(multicastGroupAddress);

mySocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, mcastOption);

参见msdn:Hi jdweng,谢谢你的回答,但我已经检查了msdn,它对于“经典”多播有很好的文档记录,但我找不到任何特定于源代码的多播示例。此代码以通常的方式完美地用于多播。我试图实现的是源特定的多播。这是一种多播类型,您可以在其中加入组,指定从哪个特定源向您想要接收数据报的组发送消息。它应使用SocketOptionName.AddSourceMembership。定义它,似乎指出该选项存在。我已经检查了Microsoft源代码,没有看到它的实现。看起来Microsoft为该选项包含了一个枚举,但没有实现任何代码来使用该选项。好的,非常感谢您的检查。我希望它能起作用是因为这个问题,这个问题似乎对这个人起作用,尽管我发现很少有人提到它。我还没有看到任何表明AddSourceMembership真的起作用的帖子。关于这个问题的海报上对答案的评论说它起作用