2013-09-26 233 views
1

我想要做一个客户端的简单示例,该客户端使用8080端口连接到任何网站并从服务器打印第一个输入。但我甚至无法连接到服务器。 用Wireshark运行TCP的头文件,我意识到服务器没有回答。 我已经关闭防火墙,防病毒,并在我的路由器中设置转发端口,但我仍然无法连接到服务器。Java - 套接字编程/阻塞端口

这里是我的代码:

import java.io.IOException; 
import java.io.InputStream; 
import java.net.InetSocketAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 


public class ProtocoloX { 
    //private byte[] bytes = new byte[1024]; 
    private byte[] bytes = new byte[]{(byte) 0xC6, 0x57, 0x54, (byte) 0x95, 0x5E, (byte) 0x9E, 0x6B, (byte) 0xC6, 0x55, 0x17, 0x55,0x52, (byte) 0x9E, 0x21}; 
    private Socket cliente; 
    private final String HOST = "stackoverflow.com"; 
    private final int PORT = 8080; 

    public boolean connect(){ 
     this.cliente = new Socket(); 
     System.out.println("-- Trying to connect: "+HOST+":"+PORT); 
     InetSocketAddress socketAddress = new InetSocketAddress(HOST, PORT); 
     try { 
      this.cliente.connect(socketAddress, 10000000); 
     } catch (IOException e) { 
      System.out.println(e); 
      System.out.println("-- CONNECTION PROBLEM "); 
      return false; 
     } 
     System.out.println("-- Connection successful"); 
     return true; 
    } 

    private void receive(){ 
     InputStream stream = null; 
     System.out.println("-- Reading data..."); 
     try { 
      stream = this.cliente.getInputStream(); 
      try { 
       int count = stream.read(this.bytes); 
       System.out.println("count:"+count); 
       System.out.println("bytes:"+this.bytes); 
      } catch (IOException e) { 
       System.out.println("-- DATA READING PROBLEM"); 
       e.printStackTrace(); 
      } 
     } catch (IOException e) { 
      System.out.println("-- DATA READING PROBLEM"); 
      e.printStackTrace(); 
     } 
     System.out.println("-- Data read successful"); 
    } 


    public static void main(String[] args) throws UnknownHostException, IOException { 
     ProtocoloX protocolo = new ProtocoloX(); 
     if(protocolo.connect()){ 
      protocolo.receive(); 
     } 

    } 
} 

什么引起的问题? 感谢:D

+2

'stackoverflow.com'没有监听端口8080 –

+1

HTTP端口是80端口。8080是替代HTTP端口 – Dampsquid

+0

好吧,现在它的工作原理是stackoverflow.com,但是当我尝试其他网站时,它会抛出一个读超时异常。会是什么呢? –

回答

0

你不会在8080端口得到任何东西,而是尝试'80'。 80是互联网网站监听请求的默认http端口。

+0

好吧,现在它的工作stackoverflow.com,但是当我尝试任何其他网站它引发了一个读超时异常。会是什么呢? –

+1

@PauloRicardoXavierGiusti您已打开原始套接字。在从服务器读取任何内容之前,您需要发送一个http GET请求。由于您尚未向服务器发送任何请求并尝试读取响应,因此您将收到超时异常。如果你想要一个允许发送http请求的高级api,那么看看[apache commons http library](http://hc.apache.org/) –

0

许多WAN网站不会响应显式指定的端口查询。例如,在网页浏览器中访问http://www.stackoverflow.com:8080也不会得到回应。确认您要连接的服务器将接受8080端口上的连接。

+0

好吧,现在它正在使用stackoverflow.com,但是当我尝试任何其他网站,它会引发读取超时异常。会是什么呢? –

+0

你改变了什么,让它在stackoverflow.com上工作? – StockB

+0

而不是使用端口8080,我现在使用80 –