【问题标题】:Windows SSDP Receiver stuck on UdpClient Recieve ActionWindows SSDP 接收器卡在 UdpClient 接收操作上
【发布时间】:2018-01-19 16:15:55
【问题描述】:

我有一个“Director”程序,它通过本地网络广播 M-SEARCH 请求。网络中有四台服务器,每台运行相同 “响应程序”程序应该用 HTTP 响应来识别服务器。

    IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, SSDP_PORT);
    client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
    client.Client.Bind(groupEP);

有时一个或多个响应者会停止接收操作

            RequestorEP = null;
            byte[] buffer = client.Receive(ref RequestorEP);

Wireshark 显示来自网络的 M-SEARCH 消息,但有时程序似乎从未读取它们。

服务器运行 Windows 10 并配备两个连接到不同本地网络的活动以太网卡。

Responder 是用 C# 编写的。

关于下一步要寻找什么有什么想法吗?

【问题讨论】:

  • 您是在相同的端口还是在不同的端口上发送和接收?此外,由于您没有使用异步,因此 Read() 将在等待响应时阻塞。这就是为什么询问传入数据是否在您期望的端口上,还有可能是您的服务器在传输过程中断开/重新连接?
  • 我在同一个端口 (1900) 上发送和接收。读取应该被阻止,因为此操作是在工作线程中完成的。我试过用超时和循环阅读。 “Director”不断发送 M-SEARCH 请求,直到它从每个服务器得到回复。 4 个服务器中有 3 个响应。一个没有。我可以看到 M-SEARCH 请求通过 Wireshark 到达有问题的服务器。我不知道为什么“响应者”不阅读它们。
  • 删除网络设备并重新加载它可以临时解决问题。但是,该问题可能会在下次重新启动时再次出现。
  • 这个问题似乎与具有多个以太网卡的系统有关。单卡系统不会发生。放弃并使用服务器的固定 IP 分配,因为它们需要双 NIC。截止日期快到了。

标签: c# ssdp


【解决方案1】:

事实证明,这个问题在这里有一个可行的答案: UDP: Read data from all network interfaces

可惜我没有早点发现它。嗯,总会有下一个版本...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多