C# 多个windows用户使用单个UDP端口登录

C# 多个windows用户使用单个UDP端口登录,c#,asp.net,C#,Asp.net,要求 (不可修改) 我有一个windows窗体应用程序。当此应用程序运行时,它将侦听UDP端口 用户可以登录到windows并打开相同的应用程序并运行它,然后在不注销的情况下切换windows用户并打开相同的应用程序并运行它 问题 这两个应用程序通过使用监听同一端口 SocketOptionName.ReuseAddress 如图所示。但只有一个人能得到数据 问题 有一些方法可以让另一个用户的应用程序读取数据?。否则,我是否可以侦听通知我windows用户切换的事件 编辑 下面是用于设置侦听器

要求 (不可修改)

我有一个windows窗体应用程序。当此应用程序运行时,它将侦听UDP端口

用户可以登录到windows并打开相同的应用程序并运行它,然后在不注销的情况下切换windows用户并打开相同的应用程序并运行它

问题

这两个应用程序通过使用监听同一端口

SocketOptionName.ReuseAddress
如图所示。但只有一个人能得到数据

问题

有一些方法可以让另一个用户的应用程序读取数据?。否则,我是否可以侦听通知我windows用户切换的事件

编辑

下面是用于设置侦听器的代码

IPEndPoint localEndPoint = new IPEndPoint(localAddress, listenPort);
UdpClient udpListener = new UdpClient();
udpListener.ExclusiveAddressUse = false;
udpListener.Client.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress, true);

udpListener.Client.Bind(localEndPoint);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
byte[] answer = udpListener.Receive(ref ep);

一种选择是切换到广播/多播设计。这是允许同一数据报发送到多个套接字的唯一直接方法

或者,转到主/客户端设计。尝试绑定到端口。如果你能,太好了,你是主人。如果失败,请查看是否有主控设备并连接到它

选择第二个端口供主机用于与客户端通信。遵循这个逻辑

  • 尝试打开端口。如果你成功了,你就是主人。还可以在主端口上侦听

  • 如果失败,请打开一个随机端口。向主机发送“注册客户端”数据报

  • 主机必须侦听主机/客户端端口上的“注册客户端”数据报。如果它收到一个,它应该将源IP和端口添加到它的客户端列表中。它必须将在主端口接收到的所有数据报重复发送给每个客户端

  • 非主控设备应以规定的间隔重复“注册客户端”数据报。主机应该删除任何没有在足够长的时间内发送“注册客户机”数据报的客户机,比如定义的时间间隔的两倍


  • 有一点很难看——如果主服务器可能退出,一些客户端将不得不将自己提升为主服务器。如果可以在机器上运行,您可能只想使用专用主机。

    为什么不让它们绑定到不同的端口?无论他们与什么人交谈,都应该向向他们发送数据报的任何端口发送回复,因此应用程序应该能够正常工作。这是一项要求,不能修改。我发布这个问题是为了讨论一个可能的解决方案,而不是需求抱歉。您将它列在了
    问题
    下,而不是
    需求
    下。我不是建议您更改需求,而是建议您解决问题。如果应用程序不尝试绑定到特定端口,而只是使用一个可用端口,那么就不会有问题。(这是广播/多播应用程序吗?)是的,但我正在端口上收听。如果我为每个windows用户创建了一个新端口,我将不得不转到客户端并为每个用户注册端口,以便他可以发送消息。这是不可能的。你不必注册任何东西来发送消息。只需将它们发送到服务器。服务器应该向发送消息的任何IP和端口发送回复。只有一端需要一个众所周知的端口。如果你真的希望同一个数据报被多个套接字接收,你需要广播或多播。这是一个有趣的解决方案,但正如你所说,它需要一个专用的主机。我仍然可以监听windows事件,该事件告诉我活动用户是否已更改。我将不得不比较解决方案,但谢谢:D