PingReply的“ RoundTripTime”经常为0吗?为什么会这样

时间:2019-09-21 02:17:57

标签: c# ping

ping大量代理时,我遇到了一个非常奇怪的问题。 “ RoundTripTime”随机返回0。

如果我第二次通过检查器运行代理列表,它将有不同的代理返回0,而其他代理则返回实际ms。

我认为这可能是因为一次请求太多,所以我尝试在其中添加一些手动睡眠,但这导致了更多的“ 0”响应时间。

我深陷其中,感谢所有帮助。

public static List<string> proxyList = new List<string>();
public static List<string> proxyNoPort = new List<string>();
public static int proxyCount;
public static int proxyTimeOut;
public static long pingResponseTime;

public static bool proxyTest()
{
    try
    {
        Ping pingTest = new Ping();
        PingReply pingResponse = pingTest.Send(proxyNoPort[proxyCount], proxyTimeOut);

        if (pingResponse != null && pingResponse.RoundtripTime < proxyTimeOut)
        {
            pingResponseTime = pingResponse.RoundtripTime;
            return true;
        }
    }
    catch
    {
        proxyList.Remove(proxyList[proxyCount]);
        proxyNoPort.Remove(proxyNoPort[proxyCount]);
        return false;
    }
    return false;
}

Picture of program 我自己进一步测试的注意事项: 如果该数字返回“ 0”,则表示它重新ping相同的代理服务器,大约占代理的90%。

if(pingResponse.RoundtripTime == 0)
{
    pingResponse = pingTest.Send(proxyNoPort[proxyCount], proxyTimeOut);
    pingResponseTime = pingResponse.RoundtripTime;
}

1 个答案:

答案 0 :(得分:0)

结果表明,使用该论坛中的代码并不总是最好的方法,您应该研究一下正式文档。事实证明,当ping响应为“ 0”时,表示连接失败。

我通过替换

完全固定了我的代码
if (pingResponse != null && pingResponse.RoundtripTime < proxyTimeOut)
{
    pingResponseTime = pingResponse.RoundtripTime;
    return true;
}

使用

if (pingResponse.Status == IPStatus.Success && pingResponse.RoundtripTime < proxyTimeOut)
{
    pingResponseTime = pingResponse.RoundtripTime;
    return true;
}

尽管并不是所有的问题都是不好的,因为使用“ Dai”通知我应该使用“ Using”标签,这大大加快了我的代理检查的速度,谢谢!