我目前正在为我最后一年的BSc项目做研究。最终产品将包括室内位置跟踪功能。传统的或最常用的方法似乎是RSSI三角测量,但我热衷于尝试提高PING方法的准确性,因为我认为这将更适合可能遭受信号衰减的位置(我打算使用该设备的位置可能具有中等数量的无线电干扰)。
我想知道是否有可能用c#编写软件,模仿linux ping实用程序的ping洪水功能(它可以发送多个ping而无需等待回复)。我假设使用多个ping并从第一次到最后一次对它们进行计时将使该方法能够在较短的距离内使用。
非常感谢
迪伦
发布于 2011-07-26 19:45:11
试试这个希望它工作得很好
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-26 19:33:51
您必须使用Ping.SendAsync()函数。如MSDN页面中所述:
对此方法的每个调用都在一个单独的线程中执行,该线程是从线程池中自动分配的。当异步操作完成时,它将引发PingCompleted事件。若要指定在SendAsync引发事件时调用的方法,必须在调用SendAsync之前向事件添加PingCompletedEventHandler委托。
这里有一个关于如何做到这一点的极好的例子:http://msdn.microsoft.com/en-us/library/a63bsyf0.aspx
https://stackoverflow.com/questions/6829141
复制相似问题