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

本文关键字:UDP 登录 单个 windows 用户 多个 | 更新日期: 2023-09-27 17:57:51

需求 (无法修改)

我有一个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);

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

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

或者,转到主/客户端设计。试着绑定到端口。如果可以的话,太好了,你就是大师。如果你失败了,看看是否有主机并连接到它。

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

  1. 试着打开端口。如果你成功了,你就是主人。同时监听主端口。

  2. 如果失败,打开一个随机端口。向主机发送一个"注册客户端"数据报。

  3. 主机必须侦听主机/客户端端口上的"注册客户端"数据报。如果接收到数据报,则应将源IP和端口添加到其客户端列表中。它必须将它在主端口上接收到的所有数据报重复到它的每个客户端。

  4. 非主机应按规定的间隔重复"注册客户端"数据报。主机应该丢弃任何在足够长的时间内没有发送"注册客户端"数据报的客户端,比如说两倍于定义的间隔。

一个丑陋的地方——如果master可能退出,一些客户端将不得不将自己提升为master。如果你能在机器上运行,你可能只想使用一个专用的主机。