c# - udpclient 仅在本地接收广播(c#、Unity)

标签 c# unity3d udpclient receiver

我想在 Unity 中使用 UdpClient 接收广播到 255.255.255.255 的 UDP 消息。 但是无论我尝试哪种设置组合,如果它是从本地主机发送的,它只会收到一条消息。 我已尝试从这些资源中获取合适的示例代码,但没有成功:

我正在任务下方运行代码。

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})");
    }
}

我结合使用了几个注释行。

  • 当我使用端口 9000 上的另一个 UdpClient 从同一个应用程序中向 255.255.255.255 发送内容时,它按预期工作。
  • 当我从网络上的任何其他机器向 255.255.255.255 发送内容时
    • 网络中的任何机器都会收到它(在 osx 设备上使用 PacketSender 检查)
    • 在我开发此应用程序的 Windows 机器上,消息由 UdpSenderReceiver 接收
    • 但是 Unity 中的 udpClient 没有收到任何东西——防火墙也没有询问或告诉我任何东西。

这可能是什么问题?

最佳答案

显然,默认情况下 Windows Defender 会阻止 Unity Editor(但不会阻止 UdpSenderReceiver)。

我必须通过在公共(public)域上承认 Unity 编辑器来解决它

image

规则

  • Unity 2019.3.3f1 编辑器
  • Unity 2019.3.4f1 编辑器

已经存在并且没有被修改。
我修改了 Unity 2019.2.4f1 编辑器的规则以允许从公共(public)域访问(我只是允许所有域)。

关于c# - udpclient 仅在本地接收广播(c#、Unity),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61436448/

相关文章:

c# - Web Api 路由过滤器到子目录

c# - UDP接收-包到达的精确时间C#

c# - UdpClient,Send() 之后的 Receive() 不起作用?

c# - 等待动画、渲染完成 - XAML 和 C#

c# - HTML 敏捷包查找后代

firebase - 如何处理 Unity 上的 Firebase 身份验证错误

unity3d - 通过脚本设置层次过滤器

C# 多态性 - 指定继承类型

c# - 在 Udp 级别 :"Only one usage of each socket address is normally permitted"

c# - 在 starUML 中选择多个项目或对象(使用 ctrl + 鼠标左键单击)