超时被错误的 ip 忽略
Timeout ignored with wrong ip
我正在开发 Android 应用程序(Java 8,apache.commons.net.ftp 3.6,最小值:API 24/目标:API 27)连接到 FTP 服务器,但我遇到了一个奇怪的问题:
如果我连接到 public 测试服务器之一(例如 speedtest.tele2.net
)或直接连接到 IP 地址(例如 10.1.1.123
),它工作正常。
如果我故意在 "normal" 地址中添加拼写错误(例如 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: Connection refused
我已经试了很多次了,异常似乎总是在 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
如果您得到 "connection refused",则表示该 IP 地址实际上已被网络中的某些主机使用。如果该地址没有任何内容,您将收到更多类似 "no route to host".
的错误
我正在开发 Android 应用程序(Java 8,apache.commons.net.ftp 3.6,最小值:API 24/目标:API 27)连接到 FTP 服务器,但我遇到了一个奇怪的问题:
如果我连接到 public 测试服务器之一(例如 speedtest.tele2.net
)或直接连接到 IP 地址(例如 10.1.1.123
),它工作正常。
如果我故意在 "normal" 地址中添加拼写错误(例如 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: Connection refused
我已经试了很多次了,异常似乎总是在 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
如果您得到 "connection refused",则表示该 IP 地址实际上已被网络中的某些主机使用。如果该地址没有任何内容,您将收到更多类似 "no route to host".
的错误