UDP服务器客户端订户发布者
我并不确定是否可能出现以下情况。UDP服务器客户端订户发布者
只使用UdpClient或UDP套接字,我想实现一个发布者和多个客户端环境。
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));
}
服务器可以这样简单呢? 我错过了什么吗?
附加信息: 当使用真正的外部IP,我收到以下错误: 您必须执行此操作之前调用bind方法。
答案仍然是“是的,这是可能的。”基本上,你的问题是描述UDP protocol,你所问的所有内容都被编入UDP protocol。在UDP协议中,除非用户明确标识自己(作为他们发送的数据的一部分),否则您不知道有关订户的任何信息。但是,在UDP中,没有发布者和订阅者的概念,只有客户端。您的客户可以发送数据,他们可以接收数据,每个连接到管道的客户端都可以看到每个其他客户端发布的内容。
- 如果您想拥有一个严格的发布者,那么您只需让一个客户端将数据发送到管道。
- 如果你想拥有一个严格的用户,那么你只需让一个给定的客户端从管道接收数据(就像你在例子中那样)。
Can the server be that simple as well? Am I missing something?
在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。
谢谢。我也是红色的。 但问题是如果我可以发送数据而不必知道:“www.contoso.com”和11000(ip.port)?这样,我必须从客户端发送消息,以便服务器可以响应。有什么方法可以让我的客户只能听到吗? (也许我有点不足)。 – 2012-01-06 23:00:48
而服务器,*仅*发送(或者可选地,仅在有监听器时发送,以释放资源)。 – 2012-01-06 23:08:05
www.contoso.com地址是所有客户端都可以看到的UDP管道的地址。每个客户都必须知道该管道,否则他们不能相互交谈。可选的发送受到两方面的阻碍:很难确定一个听众何时连接,这也与您最初的“匿名”要求相冲突。 – Kiril 2012-01-07 01:00:42
是的,这是可能的。 – Kiril 2012-01-06 21:47:20
@Lirik好笑。 (我知道我问什么,所以跳过它)。 – 2012-01-06 22:10:41
对不起,但你基本上描述了UDP协议并询问是否可能:)。 – Kiril 2012-01-06 22:33:43