java.net.SocketTimeoutException (ANDROID)

7

我使用了以下代码进行连接:

URL url = new URL("https://results.bput.ac.in/");

HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(1000 * 20);

urlc.connect();

返回了一个SocketTimeoutException

异常

我得到的确切异常是:

java.net.SocketTimeoutException: failed to connect to results.bput.ac.in/14.139.212.166 (port 443) after 90000ms

有时候也会出现这种情况 -
java.net.SocketTimeoutException: failed to connect to results.bput.ac.in/14.139.212.166 (port 80) after 90000ms
  • 尝试删除 urlc.setConnectTimeout(1000 * 20); 但仍然出现异常。
  • 使用 http 替代 httpsURL url = new URL("http://results.bput.ac.in/");,但没有得到结果。
  • 使用 URL url = new URL("https://www.facebook.com/"); 测试成功。
  • 更改超时时间后仍然出现相同的异常。

问题出在这个特定的链接上 - http://results.bput.ac.in/

信息

我提供的链接 http://results.bput.ac.in/ 在任何网络浏览器上都可以完美地运行,没有任何延迟。

我得知有些人无法打开此网站,它会卡顿,但是我可以毫无卡顿地打开它。

我的研究

我已经尝试过这个SO问题这个SO问题这个Github解决方案Java代码极客解决方案,但都没有得到结果。

更新

我已经使用我的Wi-Fi和移动数据进行了测试,因为我认为我的路由器可能在端口上有些问题。但是我也用移动数据得到了相同的异常。

有没有人有解决办法呢?


那个链接还能用吗? - Pankaj Nimgade
我已经编辑了我的问题。@PankajNimgade 链接有效。 - Sagar Nayak
1
我在浏览器中尝试了那个链接,但它超时了,你确定吗? - Pankaj Nimgade
我现在尝试了一下@PankajNimgade,加载只用了1秒钟。 - Sagar Nayak
2个回答

2
如果主机名解析为多个IP地址,则此客户端将按RFC 3484顺序尝试每个IP地址。如果连接到这些地址中的每一个都失败,则在连接尝试引发异常之前会经过多个超时。同时支持IPv6IPv4的主机名始终至少有2个IP地址。-- 文档 您已经使用了setConnectTimeout()并添加了最大时间,因此没有疑问。 SocketTimeoutException的主要原因是在建立连接之前超时。
然后,主要且确定的原因是无法与您的服务器建立连接

确保您可以打开该URL并建立正确的连接。您的服务器没有响应,但https://www.facebook.com也可以使用,因此它正常工作。这意味着在您解决连接超时问题之前,客户端错误与此无关。 - Shree Krishna
如果您可以顺利地从浏览器中打开它,那么您的代码应该可以正常工作。但我认为它仍然存在滞后。我们无法打开它。 - Shree Krishna
是的,你也可以尝试增加它,从你的浏览器打开需要多长时间? - Shree Krishna
SocketTimeoutException 的意思是连接超时或读取超时,而在这种情况下它表示连接超时。 - user207421
@EJP 我也是这么说的,如果在建立连接之前超时了。那么为什么它有资格向下呢? - Shree Krishna
显示剩余5条评论

0

我该怎么做? - Sagar Nayak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接