作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在方法 Receive
之前创建了一个组并发送消息 1 行,通过创建线程等待消息。这段代码完美。我只是想知道为什么我不应该在 Send
方法中添加这一行,以便在我尝试向组发送内容之前将套接字加入组。
server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, MulticastOption);
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class MAIN
{
private static MulticastOption CreateGroup()
{
return new MulticastOption(IPAddress.Parse("224.100.0.1"));
}
private static void Receive(MulticastOption MulticastOption)
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
EndPoint ep = (EndPoint)iep;
sock.Bind(iep);
sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, MulticastOption);
//
byte[] data = new byte[1024];
new Thread(new ThreadStart(Send)).Start();
int recv = sock.ReceiveFrom(data, ref ep);
String stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
sock.Close();
}
private static void Send()
{
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("224.100.0.1"), 9050);
byte[] data = Encoding.ASCII.GetBytes("This is a test message");
server.SendTo(data, iep);
server.Close();
}
public static void Main(String[] args)
{
Receive(CreateGroup());
Console.ReadKey();
}
}
最佳答案
来自 this article :
The IP_ADD_MEMBERSHIP option allows you to join a multicast group specified by the host group address in the multicast address structure. You must join a group to receive multicast datagrams. You do not need to join a group to send multicast datagrams.
但是,由于默认的 TTL 值,这仅适用于本地子网。参见 this article以获得更明确的答案。
关于c# - 关于 SetSocketOption & MulticastOption 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6414171/
我在方法 Receive 之前创建了一个组并发送消息 1 行,通过创建线程等待消息。这段代码完美。我只是想知道为什么我不应该在 Send 方法中添加这一行,以便在我尝试向组发送内容之前将套接字加入组。
我是一名优秀的程序员,十分优秀!