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;
}
答案 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”标签,这大大加快了我的代理检查的速度,谢谢!