当我在同一个UDP端口上启动多个应用程序实例侦听时,只有最后一个接收数据报 . 有没有办法将数据发送到除发送广播以外的所有实例(在所有情况下都接收广播)?
我的应用程序(命令行):
UdpClient client = new UdpClient();
client.Client.SetSocketOption(
SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
client.Client.Bind(new IPEndPoint(0, 7894));
client.EnableBroadcast = true;
Console.WriteLine("Press key to send datagram");
while (true)
{
if (client.Available > 0)
{
IPEndPoint ep = null;
client.Receive(ref ep);
Console.WriteLine("Received");
}
if (Console.KeyAvailable)
{
Console.ReadKey();
client.Send(new byte[] { 1 }, 1, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 7894));
Console.WriteLine("Sent");
}
}
1 回答
端口一次只能由一个应用程序/进程拥有,因此发送到该端口的数据报只能由一个实例接收 .
一种干净的方式是每个监听器使用一个短暂的端口并将其注册到发送者应用程序 .