2013-09-26 3 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

'80'대신 포트 8080에서 아무 것도 얻을 수 없습니다. 80은 인터넷 웹 사이트가 요청을 청취하는 기본 http 포트입니다.

+0

좋아, 이제는 stackoverflow.com, 작동하지만 다른 웹 사이트를 시도 할 때 그것은 읽기 제한 시간 예외가 throw됩니다. 뭐가 될수 있었는지? –

+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을 사용하는 대신, 현재 8022을 사용하고 있습니다. –