首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不等待回复的情况下发送多个Pings C#

问在不等待回复的情况下发送多个Pings C#
EN

Stack Overflow用户
提问于 2011-07-26 19:12:44
回答 2查看 2.6K关注 0票数 2

我目前正在为我最后一年的BSc项目做研究。最终产品将包括室内位置跟踪功能。传统的或最常用的方法似乎是RSSI三角测量,但我热衷于尝试提高PING方法的准确性,因为我认为这将更适合可能遭受信号衰减的位置(我打算使用该设备的位置可能具有中等数量的无线电干扰)。

我想知道是否有可能用c#编写软件,模仿linux ping实用程序的ping洪水功能(它可以发送多个ping而无需等待回复)。我假设使用多个ping并从第一次到最后一次对它们进行计时将使该方法能够在较短的距离内使用。

非常感谢

迪伦

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-26 19:45:11

试试这个希望它工作得很好

代码语言:javascript
复制
private ArrayList IPList()
        {
            string myipsplit = string.Empty;
            string myip =
                Dns.GetHostAddresses(
                    Dns.GetHostName())[0].ToString();
            string[] myiparray = myip.Split(new[] {'.'});
            for (int j = 1; j < myiparray.Length; j++)
                myipsplit += myiparray[j - 1] + ".";
            var sb = new ArrayList();
            MyPing ping = delegate(int id)
                              {
                                  string ls = myipsplit + id;
                                  var pingSender = new System.Net.NetworkInformation.Ping();
                                  PingReply reply = pingSender.Send(ls, 0);
                                  if (reply != null)
                                      if (reply.Status == IPStatus.Success)
                                          sb.Add(ls);
                              };
            var asyncResults = new IAsyncResult[0x100];
            for (int i = 1; i < 0x100; i++)
                asyncResults[i] = ping.BeginInvoke(i, null, null);
            for (int i = 1; i < 0x100; i++)
                ping.EndInvoke(asyncResults[i]);
            return sb;
        }

        #region Nested type: MyPing

        private delegate void MyPing(int id);

        #endregion
票数 1
EN

Stack Overflow用户

发布于 2011-07-26 19:33:51

您必须使用Ping.SendAsync()函数。如MSDN页面中所述:

对此方法的每个调用都在一个单独的线程中执行,该线程是从线程池中自动分配的。当异步操作完成时,它将引发PingCompleted事件。若要指定在SendAsync引发事件时调用的方法,必须在调用SendAsync之前向事件添加PingCompletedEventHandler委托。

这里有一个关于如何做到这一点的极好的例子:http://msdn.microsoft.com/en-us/library/a63bsyf0.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6829141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档