`

用telnet的方式检验远程服务器的连通性,在tomcat中遇到问题

阅读更多
用了apache.commons.net.telnet包来实现telnet远程服务器某个端口是否开通从而来判断远程服务器是否能连通。
结果出现以下问题:
公司内网中并且是在tomcat中 ,即便远程服务器(远程服务器在公司外网)停止, 但是telnet.isConnected()返回仍然是ture,(我看了下apache.commons.net.telnet包代码,其实底层也是用socket来实现,我也直接用java 的Socket检测,直接抛开apache.commons.net.telnet包,但是Socket仍然能连接。),直到tomcat重启后,我再测才会报端口不通了。
另外,如果我单独把代码拿带main()中运行,不用tomcat,也是正常的。
还有一种情况,如果要检查的远程服务器是在公司内网,那么当我把这台服务器关闭,即便不重启tomcat,也会报不能连通。就是说是正常的。所以这个应该可以排除tomcat自己的缓存问题。

在家测,就是在公司外网测,就是完全正常,tomcat也不用重启。

现在我初步断定应该是tomcat和公司内部的外网出口可能会有什么缓存之类的,一旦tomcat和公司的外网出口建立连接就会有缓存在哪里。请教各为高手能不能给点意见,或者怎么样才能把tomcat和公司外网出口的缓存断掉?谢谢了。

上段代码:


import java.io.IOException;
import java.net.SocketException;

import org.apache.commons.net.telnet.*;
import org.apache.log4j.Logger;


/**
*
* @author Administrator
*
*/
public class NetTelnetUtil {


public static boolean checkServerAvaliable(String serverIp, String port,
int timeout) {
boolean isConnect = false;
TelnetClient telnet = new TelnetClient();
try {
telnet.setConnectTimeout(timeout);
telnet.connect(serverIp, Integer.valueOf(port));
if (telnet != null) {
isConnect = telnet.isConnected();
}
}  catch (SocketException ioe) {
System.out.println(ioe);
} catch (IOException se) {
System.out.println(se);
}finally {
disconnect(telnet);
}
if (isConnect) {
System.out.println("Port: " + port + " is availabled to telnet.");
}
return isConnect;
}

public static void disconnect(TelnetClient telnet) {
try {
System.out.println("telnet disconnect.");
telnet.disconnect();
} catch (IOException e) {
System.out.println(e);
}
}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics