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除外)。 由于这些网站不在端口81-90上提供服务,因此它应该引发异常,但会被阻止。对于端口80,它可以正常工作。 当我尝试连接到安装在计算机上的apache服务器时,它不会阻塞任何端口号,并且会给我“拒绝连接”错误,这是显而易见的行为。 那么为什么会这样呢。提前致谢。     
已邀请:
  当我尝试连接到google.com或w3schools.com之类的任何网站时,我的程序都挂在socket()上,要求除80外的端口号。由于这些网站不在81-90端口上提供服务,因此它应该引发异常,但相反受阻。 几乎可以肯定,这不是Java的工作。 当您调用“ 2”构造函数时,JVM要求操作系统使用提供的端口号尝试建立到与提供的名称对应的IP地址的连接。假设我们正在谈论TCP / IP,则OS发送TCP \'SYN \'消息,并等待响应: 如果响应为\'SYN-ACK \',则按照协议继续建立连接;请参阅http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_ Establishment。 如果响应为“ RST”(重置),则连接失败,并导致Java“拒绝连接”异常。 (通常,如果\'SYN \'到达远程服务器,只是发现您尝试连接的端口上没有应用程序“正在监听”,就会发生这种情况。) 如果响应是某种ICMP消息(例如,ICMP目标不可访问),则通常会导致连接请求立即失败以及Java异常。 如果没有响应,则操作系统将一次又一次尝试。根据Java默认的连接超时(或显式超时),此过程可能会持续很长时间。 因此,最有可能发生的事情是某些东西正在过滤时髦端口上的\'SYN \'消息,并将其丢弃。它可能是PC上的本地防火墙软件,网关中的防火墙软件,ISP的网络,或者是您尝试与之通信的远程系统中的软件。否则,这可能是\'SYN-ACK \'消息返回时发生的。 无论哪种方式,阻塞/超时行为都是TCP / IP网络固有的,并且无法在OS或Java级别进行准确诊断。您只需要调整您的期望。 (或设置较短的连接超时时间...)     
对于这种情况,以及任何情况:
         /**
         * Create end point and initialize connection with custom timeout for refused or server offline
         */
        try{
            InetSocketAddress endPoint = new InetSocketAddress(serverAddress, portNumber);
            Socket socket = new Socket();
            socket.connect(endPoint, 10000);
        } catch(Exception e){
            //... Handle connection error
        }
    

要回复问题请先登录注册