Bu kodu kullanıyorum sonunda istatistikleri almak ama süreci durdurmak zaman ping istatistikleri almak değil:Nasıl System.Diagnostics.Process bir süreci durdurmak ve
kullanmadanSystem.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = "ping";
p.StartInfo.Arguments = "-c " + count + " -i " + interval + " -s " + buffer + " -W " + timeout + " " + address;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
string readData = "";
DateTime dt = DateTime.Now.AddSeconds(5);
if (p.Start())
{
Scanner scanner = new Scanner(p.StandardOutput.BaseStream);
while (scanner.HasNextLine)
{
readData = scanner.NextLine().ToString();
Console.WriteLine(readData.ToString());
if (!string.IsNullOrEmpty(readData) && !readData.StartsWith("---"))
{
Match M = Regex.Match(readData, @"^[\d]+ bytes from ([^:]+): [^ ]+ ttl=([\d]+) time=([^ ]+) ms");
if (M != null && M.Success)
{
string IP = M.Groups[1].Value;
string TTL = M.Groups[2].Value;
string timeStr = M.Groups[3].Value;
Console.WriteLine(String.Format("Ping to {0} took {2} ms with a ttl of {1}", IP, TTL, timeStr));
// Parsing the timeStr will work the same way as above
if(dt > DateTime.Now)
{
p.StandartInput.Write("\x3");
}
}
else
{
Match M1 = Regex.Match(readData, @"^rtt [^0-9]*([\d][^\/]+)\/([^\/]+)\/([^\/]+)\/([^ ]+) ms$");
if (M1 != null && M1.Success)
{
float avgPingTime = 0;
float maxPingTime = 0;
float minPingTime = 0;
string minPingString = M1.Groups[1].Value;
string avgPingString = M1.Groups[2].Value;
string maxPingString = M1.Groups[3].Value;
// Now parse that value
float.TryParse(minPingString, System.Globalization.NumberStyles.Float, System.Globalization.NumberFormatInfo.InvariantInfo, out minPingTime);
float.TryParse(avgPingString, System.Globalization.NumberStyles.Float, System.Globalization.NumberFormatInfo.InvariantInfo, out avgPingTime);
float.TryParse(maxPingString, System.Globalization.NumberStyles.Float, System.Globalization.NumberFormatInfo.InvariantInfo, out maxPingTime);
Console.WriteLine(String.Format("Min Time : {0} , AVG {2} ms, Max Time {1}", minPingTime, maxPingTime, avgPingTime));
}
}
}
}
}
böyle
if(dt > DateTime.Now)
{
p.StandartInput.Write("\x3");
}
sonuç ekranı:
64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=13.9 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=46 time=13.9 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=46 time=13.9 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 3016ms
rtt min/avg/max/mdev = 13.910/13.926/13.951/0.010 ms
ama durursak ping
012 kullanılarakhiçbir zaman statistics
bölümüne gider, dizisi 1: 64 bytes from 8.8.8.8: icmp_req=1 ttl=46 time=13.9 ms
sekansında asılı kalır ve okumaya devam etmeyin, işlemini durdurduktan sonra statistics
nasıl gösterilir? Kullanıcı ping
o ping için kullanılan belirli bir süre için statistics
göstermesi gerekir durdurmak istediğinizde başka bir deyişle
benim sorunum
GÜNCELLEME ... Ben hayata geçirdik
olduğunu p.StandartInput.Write("/x3");
ve ping işlemini keser, ancak istatistikleri görüntülemez ve sadece orada asılı kalır.
std giriş akışına bir 'Ctrl-C' yazın, '3', 'Yaz' ("\ x3") ' – SushiHangover
' 'adb shell ping -c 3 denedim 8.8.8.8 'CTRL + C ile ama sadece imkansız bir şekilde durur, istatistik bölümünü göstermez ... –
Sadece denedim ve istatistik satırları üretiyor ... çünkü 'adb' ile test ediyorsunuz, aslında ilk kabukta adb kabuğu 've sonra' ping 've sonra Ctrl-C' çalıştırın, siz ctrl-C/pb sürecini iptal etmeyin ping işlemi değil – SushiHangover