"RoundTripTime" в PingReply очень часто равен 0?Почему это происходит - PullRequest
0 голосов
/ 21 сентября 2019

У меня очень странная проблема, возникающая при пинге большого количества прокси.«RoundTripTime» возвращает 0 случайным образом.

Если я запускаю список прокси через средство проверки во второй раз, у него будут разные прокси, возвращающие 0, и другие, возвращающиеся с фактическими мс.

Я думалвозможно, это было из-за слишком большого количества запросов одновременно, поэтому я попытался добавить в него немного спящего режима вручную, но это вызвало большее время отклика «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;
}

Изображение программы Примечания из моего собственного дальнейшего тестирования: если число возвращает «0», заставляя его повторять один и тот же прокси, работает примерно для 90% прокси.

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

1 Ответ

0 голосов
/ 21 сентября 2019

Оказывается, что использование кода с этого форума не всегда лучше, и вам, возможно, стоит заглянуть в официальные документы.Оказывается, когда ответ на эхо-запросы равен «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», и это значительно ускорило проверку прокси, спасибо!

...