2

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

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

非常感谢

迪伦

4

2 回答 2

1

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

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

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

于 2011-07-26T11:33:51.307 回答
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
于 2011-07-26T11:45:10.573 回答