udpclient 仅在本地接收广播(c#、Unity)
udpclient receives broadcast only locally (c#, Unity)
我想接收一条在 Unity 中使用 UdpClient
广播到 255.255.255.255 的 UDP 消息。
但是无论我尝试哪种设置组合,如果它是从本地主机发送的,它只会收到一条消息。
我已尝试从这些资源中获取合适的示例代码,但没有成功:
- https://gist.github.com/michaelosthege/857acac92b8ee689a6bb30d5bf23d9f6
- UdpClient receive on broadcast address
- How to do Network discovery using UDP broadcast
我是运行任务下方的代码。
private void Listen()
{
udpClient = new UdpClient(9000);
//udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, 9000));
//udpClient.EnableBroadcast = true;
//udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//udpClient.ExclusiveAddressUse = false;
//broadcastAddress = new IPEndPoint(IPAddress.Any, 9000);
//udpClient.Client.Bind(broadcastAddress);
//udpClient.Connect(broadcastAddress);
//var from = new IPEndPoint(IPAddress.Any, 9000);
var from = new IPEndPoint(0, 0);
while (true)
{
var receive = udpClient.Receive(ref from);
var msg = Encoding.UTF8.GetString(receive);
Debug.Log($"Received message \"{msg}\"");
Debug.Log($"from {from} ({from.Address})");
}
}
我结合使用了几个注释行。
- 当我从同一个应用程序中发送一些东西到 255.255.255.255 和端口 9000 上的另一个
UdpClient
时,它按预期工作。
- 当我从网络上的任何其他机器向 255.255.255.255 发送内容时
- 网络中的任何机器都会收到它(在 osx 台设备上使用 PacketSender 检查)
- 在我开发此应用程序的 windows 机器上,消息由 UdpSenderReceiver 接收
- 但是 Unity 中的 udpClient 没有收到任何东西——防火墙也没有询问或告诉我任何东西。
这可能是什么问题?
显然 Windows 默认情况下 Defender 会阻止 Unity Editor(但不会 UdpSenderReceiver)。
我不得不通过在 public 域上承认 Unity 编辑器来解决它
规则
- Unity 2019.3.3f1 编辑器
- Unity 2019.3.4f1 编辑器
已存在且未修改。
我修改了 Unity 2019.2.4f1 编辑器的规则,以允许从 public 域访问(我只是允许所有域)。
我想接收一条在 Unity 中使用 UdpClient
广播到 255.255.255.255 的 UDP 消息。
但是无论我尝试哪种设置组合,如果它是从本地主机发送的,它只会收到一条消息。
我已尝试从这些资源中获取合适的示例代码,但没有成功:
- https://gist.github.com/michaelosthege/857acac92b8ee689a6bb30d5bf23d9f6
- UdpClient receive on broadcast address
- How to do Network discovery using UDP broadcast
我是运行任务下方的代码。
private void Listen()
{
udpClient = new UdpClient(9000);
//udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, 9000));
//udpClient.EnableBroadcast = true;
//udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//udpClient.ExclusiveAddressUse = false;
//broadcastAddress = new IPEndPoint(IPAddress.Any, 9000);
//udpClient.Client.Bind(broadcastAddress);
//udpClient.Connect(broadcastAddress);
//var from = new IPEndPoint(IPAddress.Any, 9000);
var from = new IPEndPoint(0, 0);
while (true)
{
var receive = udpClient.Receive(ref from);
var msg = Encoding.UTF8.GetString(receive);
Debug.Log($"Received message \"{msg}\"");
Debug.Log($"from {from} ({from.Address})");
}
}
我结合使用了几个注释行。
- 当我从同一个应用程序中发送一些东西到 255.255.255.255 和端口 9000 上的另一个
UdpClient
时,它按预期工作。 - 当我从网络上的任何其他机器向 255.255.255.255 发送内容时
- 网络中的任何机器都会收到它(在 osx 台设备上使用 PacketSender 检查)
- 在我开发此应用程序的 windows 机器上,消息由 UdpSenderReceiver 接收
- 但是 Unity 中的 udpClient 没有收到任何东西——防火墙也没有询问或告诉我任何东西。
这可能是什么问题?
显然 Windows 默认情况下 Defender 会阻止 Unity Editor(但不会 UdpSenderReceiver)。
我不得不通过在 public 域上承认 Unity 编辑器来解决它
规则
- Unity 2019.3.3f1 编辑器
- Unity 2019.3.4f1 编辑器
已存在且未修改。
我修改了 Unity 2019.2.4f1 编辑器的规则,以允许从 public 域访问(我只是允许所有域)。