【发布时间】:2016-03-10 10:12:40
【问题描述】:
我正在用 C# 开发一个应该在树莓派上运行的程序。
它使用多播来检测网络中的其他设备,为此,我需要获取 raspi 的所有 IP。执行此操作的代码在 in another SO question 中找到,并且运行良好,但有一个例外:对 Dns.GetHostAddresses() 的调用永远挂起,但只有几次。其他时候它会正常工作。
该代码是循环的一部分,该循环以 2 秒的间隔连续发送多播数据包,直到收到另一台设备的应答。真正奇怪的是,这只发生在循环的第一次迭代中。如果第一次迭代中的调用返回返回,那么后面的所有迭代也会成功。
如果相关的话,这个类的两个实例同时在不同的线程中运行。
挂起的确切行是
IPAddress[] ips = Dns.GetHostAddresses (Dns.GetHostName ());
foreach (IPAddress localIp in ips) {...}
Dns.GetHostName ()部分每次都正确返回字符串"raspberrypi",不管它是否挂起。
任何想法为什么会挂起?错误最有可能出现在操作系统 (raspbian)、Mono 中还是在我的代码中?
如果需要更多代码,请告诉我。它与上面链接的答案基本相同。在此调用之前发生的唯一事情是启动一个线程,该线程将侦听对多播包的响应
编辑:我尝试了另一种方法,发现 in another SO question。同样的问题。它永远挂着
新代码:
IPHostEntry iphostentry = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress localIp in iphostentry.AddressList) {...}
【问题讨论】:
-
是否可以选择使用
NetworkInterface和相关类?这些将基于本地配置而不是依赖于 DNS 基础设施。 -
当然可以,只要它能让我在所有接口和 IP 上发送 UDP 包
标签: c# raspberry-pi