我不确定以下情况是否可行。
仅使用UdpClient或Udp Socket,我想实现一个发布者和多个客户端环境。
Udp服务器通过互联网在隔离的机器上进行广播。 一个或多个客户端根据需要“订阅”或“取消订阅”,从而接收广播。
有可能吗? 感谢。
编辑:如果是的话,答案者可能会详细说明吗?
编辑:没有跟踪订阅者是否可能?附加信息:
现有客户代码:
IPEndPoint IPEP = new IPEndPoint(IPAddress.Parse("EXTERNAL IP"), PORT);
UdpClient UC = new UdpClient();
byte[] REZ;
while (true)
{
REZ = UC.Receive(ref IPEP);
Console.WriteLine("REC: " + Encoding.ASCII.GetString(REZ));
}
服务器也可以这么简单吗? 我错过了什么吗?
其他信息: 使用真正的EXTERNAL IP时,我收到以下错误: 在执行此操作之前,您必须调用Bind方法。
答案 0 :(得分:1)
答案仍然是“是的,这是可能的。”基本上,您的问题是描述UDP protocol,您询问的所有内容都内置在UDP protocol中。在UDP协议中,除非明确标识自己(作为他们发送的数据的一部分),否则您对订户一无所知。但是,在UDP中,没有发布者和订阅者的概念,只有客户端。您的客户可以发送数据,他们可以接收数据,连接到管道的每个客户端都可以看到每个其他客户端发布的内容。
服务器也可以这么简单吗?我错过了什么吗?
在UDP中,技术上没有客户端和服务器,每个端点都是客户端。但答案是(再次):是的,服务器也可以这么简单:
UdpClient udpClient = new UdpClient("www.contoso.com", 11000);
Byte[] sendBytes = Encoding.ASCII.GetBytes("Is anybody there");
try
{
udpClient.Send(sendBytes, sendBytes.Length);
}
catch ( Exception e )
{
Console.WriteLine( e.ToString());
}
上述代码直接取自UdpClient.Send的文档。