【问题标题】:ping IP addresses constantly不断ping IP地址
【发布时间】:2014-03-21 21:18:44
【问题描述】:

我是一名项目工程师,我正在开发一个多路复用器系统,我现在正在编写软件来使用 Visual Basic 2010 控制系统,因为公司不会为专业软件开发人员花钱。主程序运行良好,但我有一个问题要问那些更有经验的人。我的系统中有 10 个以太网设备(海上和海底),我需要监控它们的连接状态。

我要解决的方法是在循环中一遍又一遍地按顺序 ping 每个 IP 地址,如果它已连接/断开连接,我会从 imagelist 控件更改一个pitcurebox 以显示连接状态。这是在一个新线程中完成的,以阻止主界面变得无响应,并且一切正常,但当然更新速度很慢,所以......

我想问你们,有没有更好的方法来显示系统上连接/断开的 IP 地址?我已经搜索了互联网,但我找到的所有内容都不是我想要的,或者我只是在搜索。

感谢您的宝贵时间。

【问题讨论】:

  • 如果您没有更多的定义,这很难回答,什么是连接的 IP 地址?它是您从其获得对 ICMP-ping 数据包的响应的 IP 吗?你看过msdn.microsoft.com/en-us/library/… 吗?你所说的“更好的方法”是什么意思,你的意思是一个新的程序吗?还是改用你当前的程序?
  • 在你的无限循环中,我还将实现一个 Thread.Sleep(2000); (每次迭代之间有 2 秒的超时时间,这将大大降低程序中资源的使用。另外,您目前如何测试设备是否在线/离线?
  • 抱歉,连接的 IP 地址确实是一个 IP,我可以从系统内得到响应,我有一个顶部系统,所有模块都运行 10.0.0.XXX IP,并且 HV 调制解调器传递数据到海底调制解调器和所有具有 10.0.100.XXX IP 的海底地址。我看过 ping 类,但想知道是否有更有效的方法来确定是否可以到达 IP 地址,而不是一个接一个地 ping,这似乎有点笨拙。对不起,我是一个相当新的程序员。
  • 我确实使用了当前设置为 5000 毫秒的 sleep.thread。我使用 If - then - else 语句。如果被 ping 的 IP 返回设置为“开”,则其无法访问并将图像设置为“关”。很好,但是当我故意断开设备进行测试时,系统响应缓慢。是否有任何对象或类来监视特定的 IP/端口(它们不会更改)并在检测到更改或我做的太复杂时触发事件。

标签: visual-studio-2010 ip-address


【解决方案1】:

由于您使用的是 UI 应用程序,因此请查看 Ping-class 和 async method for pinging,这取决于您的正常 ping 时间和网络流量的严重程度,我会更改 ping 时间,但至少需要每秒一次。

在表单中使用一个调用某个方法的计时器,例如async void UpdateMachineStatus(IPAdress adr),它等待对pinger 的调用,即var result = await Ping.SendPingAsync(adr),然后执行一些操作。这将使用非阻塞等待并且不会占用系统资源。

利用异步的力量!

【讨论】:

  • 非常感谢我正在寻找的东西。
  • 好吧,整个下午都在玩这个。它完美地工作。我做了你所说的 flindeberg(非常感谢),创建了一个计时器,它调用一个子例程,该子例程循环遍历包含我的 IP 地址的数组并向每个人发送一个 asnyc ping。然后我创建了一个处理 ping 的 ping 完成事件处理程序,如果 IPstatus = 成功,则将状态图像保持/更改为绿色,否则将状态图像保持/更改为“关闭”。我的程序现在反应灵敏,当我拔下网络插头进行测试时,“状态”变化更快。
  • @NorthernJoy,很高兴我能帮上忙,非常感谢您回复我这么说:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 2012-07-15
  • 1970-01-01
  • 2018-01-14
  • 2011-06-24
  • 1970-01-01
  • 2018-11-22
相关资源
最近更新 更多