C# 计算最小/最大/平均ping响应
下面是一个测试流行RuneScape游戏的每个服务器的应用程序。我在139台服务器中的每台上运行ping,并将滞后值添加到阵列中。在遍历列表条目时,我可以计算每个服务器的平均、最小和最大延迟 现在,在我的代码中,当注意到其中一个无法访问的服务器时,最低延迟显示为0。我不确定如何处理ping响应是否已达到超时并将0发送到数组列表 当服务器关闭时,如何避免将0作为最低pingC# 计算最小/最大/平均ping响应,c#,console-application,ping,C#,Console Application,Ping,下面是一个测试流行RuneScape游戏的每个服务器的应用程序。我在139台服务器中的每台上运行ping,并将滞后值添加到阵列中。在遍历列表条目时,我可以计算每个服务器的平均、最小和最大延迟 现在,在我的代码中,当注意到其中一个无法访问的服务器时,最低延迟显示为0。我不确定如何处理ping响应是否已达到超时并将0发送到数组列表 当服务器关闭时,如何避免将0作为最低ping using System; using System.Net.NetworkInformation; using Syste
using System;
using System.Net.NetworkInformation;
using System.Collections.Generic;
namespace RuneScape_Ping_Tool
{
class Program
{
static void Main(string[] args)
{
Console.Write(Environment.NewLine + "Start the test? (y/n): ");
if (Console.Read() == char.Parse("y"))
{
Console.WriteLine();
Ping();
}
}
static void Ping()
{
List<int> lag = new List<int>();
for (int server = 1; server <= 139; server++)
{
string url = "world" + server.ToString() + ".runescape.com";
Console.WriteLine("Checking world " + server + "...");
Ping ping = new Ping();
PingReply reply = ping.Send(url);
lag.Add(int.Parse(reply.RoundtripTime.ToString()));
}
for (int i = 1; i <= 139; i++)
{
Console.WriteLine("World " + i + ": " + lag[i - 1]);
}
int average = 0;
int highest = 1;
int lowest = 1000;
int highestWorld = 0;
int lowestWorld = 0;
for (int i = 1; i <= 139; i++)
{
average = average + lag[i - 1];
}
for (int i = 1; i <= 139; i++)
{
if (highest < lag[i - 1])
{
highest = lag[i - 1];
highestWorld = i;
}
}
for (int i = 1; i <= 139; i++)
{
if (lowest > lag[i - 1])
{
lowest = lag[i - 1];
lowestWorld = i;
}
}
Console.WriteLine();
Console.WriteLine("Average lag: " + average / 139);
Console.WriteLine("Highest lag: " + highest + " in world " + highestWorld);
Console.WriteLine("Lowest lag: " + lowest + " in world " + lowestWorld);
Console.Write(Environment.NewLine + "Start the test? (y/n): ");
if (Console.Read() == char.Parse("y"))
{
Console.WriteLine();
Ping();
}
}
}
}
使用系统;
使用System.Net.NetworkInformation;
使用System.Collections.Generic;
名称空间RuneScape\u Ping\u工具
{
班级计划
{
静态void Main(字符串[]参数)
{
Console.Write(Environment.NewLine+“启动测试”(y/n):”;
if(Console.Read()==char.Parse(“y”))
{
Console.WriteLine();
Ping();
}
}
静态无效Ping()
{
列表滞后=新列表();
对于(int server=1;server您可以跳过零吗?此外,您还可以将所有计算放在一个循环中
int n = 0 // number of data points
for (int i = 0; i < 139; ++i) {
if (lag[i] == 0) {
continue; // skip 0 values
}
++n;
sum += lag[i];
if (highest < lag[i]) {
highest = lag[i];
highestWorld = i + 1;
}
if (lowest > lag[i]) {
lowest = lag[i];
lowestWorld = i + 1;
}
average = sum / n; // Note: you may want to round this.
}
int n=0//数据点的数量
对于(int i=0;i<139;++i){
如果(滞后[i]==0){
continue;//跳过0个值
}
++n;
总和+=滞后[i];
if(最高<滞后[i]){
最高=滞后[i];
最高世界=i+1;
}
如果(最低>滞后[i]){
最低=滞后[i];
最低世界=i+1;
}
average=sum/n;//注意:您可能需要对此进行四舍五入。
}
你能跳过零吗?同样,你也可以把所有的计算放在一个循环中
int n = 0 // number of data points
for (int i = 0; i < 139; ++i) {
if (lag[i] == 0) {
continue; // skip 0 values
}
++n;
sum += lag[i];
if (highest < lag[i]) {
highest = lag[i];
highestWorld = i + 1;
}
if (lowest > lag[i]) {
lowest = lag[i];
lowestWorld = i + 1;
}
average = sum / n; // Note: you may want to round this.
}
int n=0//数据点的数量
对于(int i=0;i<139;++i){
如果(滞后[i]==0){
continue;//跳过0个值
}
++n;
总和+=滞后[i];
if(最高<滞后[i]){
最高=滞后[i];
最高世界=i+1;
}
如果(最低>滞后[i]){
最低=滞后[i];
最低世界=i+1;
}
average=sum/n;//注意:您可能需要对此进行四舍五入。
}
您可以通过这些函数获得最小值、最大值和平均值
var nozeros = lag.Where(i => i > 0);
int lowest = nozeros.Min();
int lowestWorld = lag.IndexOf(lowest);
int highest = nozeros.Max();
int highestWorld = lag.IndexOf(highest);
int average = (int)nozeros.Average();
使用这些函数可以得到最小值、最大值和平均值
var nozeros = lag.Where(i => i > 0);
int lowest = nozeros.Min();
int lowestWorld = lag.IndexOf(lowest);
int highest = nozeros.Max();
int highestWorld = lag.IndexOf(highest);
int average = (int)nozeros.Average();
首先考虑并行运行(一次4次):
然后只收集有效的结果,使用PingReply.Status
而不是检查0
:
var validResults = results.Where(r => r.Status == IPStatus.Success)
.Select(r => r.RoundtripTime);
以下是您需要的信息:
Console.WriteLine("Total Results: {0}", results.Count());
Console.WriteLine("Valid Results: {0}", validResults.Count());
Console.WriteLine("Min from Valid: {0}", validResults.Min());
Console.WriteLine("Max from Valid: {0}", validResults.Max());
Console.WriteLine("Avg from Valid: {0}", validResults.Average());
首先考虑并行运行(一次4次):
然后只收集有效的结果,使用PingReply.Status
而不是检查0
:
var validResults = results.Where(r => r.Status == IPStatus.Success)
.Select(r => r.RoundtripTime);
以下是您需要的信息:
Console.WriteLine("Total Results: {0}", results.Count());
Console.WriteLine("Valid Results: {0}", validResults.Count());
Console.WriteLine("Min from Valid: {0}", validResults.Min());
Console.WriteLine("Max from Valid: {0}", validResults.Max());
Console.WriteLine("Avg from Valid: {0}", validResults.Average());
我想你的意思是I=>I>0
。似乎我在说lag.Where
的定义时出错了,不包含在…generic.list
中。我需要其他参考吗?你的文件顶部有using System.Linq;
声明吗?我想你的意思是I=>I>0
。似乎我得到了一个说的定义滞后时出错。其中不包含在…generic.list
中。我需要其他参考吗?您的文件顶部是否声明了使用System.Linq;
?我们确实想检查返回的PingResult.Status
值?检查0似乎是一个黑客行为。我应该使用一个循环而不是3。谢谢。@yamen:听起来不错。我想说明逻辑,但我不会说C。谢谢你的帮助!我们确实想检查返回的PingResult.Status
值?检查0似乎像是一个黑客。我应该使用一个循环而不是3。谢谢。@yamen:听起来不错。我想要ed解释了逻辑,但我不会说C。谢谢你的帮助!