发送多个Ping而无需等待回复Windows C#

时间:2011-07-26 11:12:44

标签: c# windows wifi ping triangulation

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

我想知道是否有可能在c#中编写软件来模仿linux ping实用程序的ping泛洪功能(它可以在不等待回复的情况下发送多个ping)。我假设使用多个ping并从第一个到最后一个计时它们将使得该方法能够在更短的距离内使用。

非常感谢

迪伦

2 个答案:

答案 0 :(得分:1)

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

  

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

以下是如何做到这一点的精彩示例:http://msdn.microsoft.com/en-us/library/a63bsyf0.aspx

答案 1 :(得分:1)

试试这个希望它运作良好

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