连接到服务器的Java套接字块
我正在尝试使用
Java套接字连接到服务器.我正在尝试从端口80连接到90
int port; Socket clientsocket; String hostname = "www.google.com"; for(port = 80;port<=90; port++){ try{ clientsocket = new Socket(hostname,port); System.out.println("Connection at port " + port + "t" + clientsocket.isConnected()); clientsocket.close(); } catch(Exception e){ System.out.println(e.getMessage()); } } 当我尝试连接到任何网站,如google.com或w3schools.com时,我的程序挂起socket()调用端口号,除了80. 解决方法
这几乎肯定不是Java的做法. 当您调用Socket(String,int)构造函数时,JVM会要求操作系统尝试使用提供的端口号建立与提供的名称对应的IP地址的连接.假设我们正在讨论TCP / IP,操作系统会发送TCP“SYN”消息,并等待响应: >如果响应是’SYN-ACK’,则按照协议继续建立连接;见http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_establishment. 所以最有可能发生的事情就是在某个时髦的端口上过滤掉“SYN”消息,并简单地将它们丢弃.它可能是PC上的本地防火墙软件,网关中的防火墙软件,或ISP的网络,或者您尝试与之通信的远程系统中的软件.或者这可能发生在回来的’SYN-ACK’消息中. 无论哪种方式,阻塞/超时行为都是TCP / IP网络所固有的,并且无法在OS或Java级别进行准确诊断.你只需要调整你的期望. (或设置较短的连接超时…) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |