gpt4 book ai didi

java - 由于 ip 错误而忽略超时

转载 作者:行者123 更新时间:2023-12-02 00:58:50 25 4
gpt4 key购买 nike

我正在开发一个连接到 FTP 服务器的 Android 应用程序(Java 8,apache.commons.net.ftp 3.6,最小值:API 24/目标:API 27),但我遇到了一个奇怪的问题:

如果我直接连接到公共(public)测试服务器之一(例如 speedtest.tele2.net)或 IP 地址(例如 10.1.1.123),则可以正常工作.

如果我故意在“正常”地址中添加拼写错误(例如 sspeedtest.tele2.net),我会得到预期的 java.net.UnknownHostException 但如果我向 IP 地址添加拼写错误,无论它是否在同一网络中(例如 10.1.1.223),不会发生任何其他情况 - 没有异常、没有错误、没有结果,即使在设置之后也是如此超时时间已过。

代码:

FTPClient f = new FTPClient();
f.setDefaultTimeout(5000); //5 seconds

try {
f.connect(url,port);
boolean b = f.login(username,password);
Log.d(TAG,"logged in="+b+", connected="+f.isConnected());
} catch (IOException e) {
e.printStackTrace();
}

我让它运行更长一点,最后,1分16秒后抛出异常:

W/System.err:java.net.ConnectException:连接被拒绝

我已经尝试过多次,但异常似乎总是在 1:16 之后抛出。

我如何将这一点设置为默认超时?我必须使用其他的吗?

最佳答案

您正在设置接收数据的超时。打开连接的超时是单独的,并使用 setConnectTimeout(int connectTimeout) 方法设置:

FTPClient f = new FTPClient();
f.setConnectTimeout(5000); // 5 second timeout to open connection
f.setDefaultTimeout(5000); // 5 second timeout when receiving data

如果您收到“连接被拒绝”,则表示该 IP 地址实际上已被网络中的某些主机使用。如果该地址没有任何内容,您将收到类似“没有到主机的路由”的错误。

关于java - 由于 ip 错误而忽略超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60974242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com