2013-09-26 194 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 –