浏览 3878 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-07-18
结果出现以下问题: 在公司内网中并且是在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); } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-07-20
感觉跟Tomcat没啥关系,会不会是因为在公司内网访问外网是通过代理或者其他什么机制进行的,这个问题可能正是这种机制造成了
|
|
返回顶楼 | |
发表时间:2012-07-20
最后修改:2012-07-20
yunzhu 写道 感觉跟Tomcat没啥关系,会不会是因为在公司内网访问外网是通过代理或者其他什么机制进行的,这个问题可能正是这种机制造成了
这个应该不是单单tomcat能造成的问题,应该是tomcat和你说那个内网访问外网机制造成的。如果和tomcat没关系,正如我上面提到的那个,如果我把代码单独抽出来,用main()运行,它也是正常,或者我重启tomcat也是正常的哦。 我就是怀疑是不是tomcat和内网的某个出口代理有session之类的,要把这个session清掉才行。 |
|
返回顶楼 | |