2013-02-05 5 views
5

연결을 설정하고 제대로 작동하는지 확인하기 위해 (처음에는 간단한) 서버 클라이언트를 프로그래밍하려고합니다. 그리고 그렇게합니다. 나가 나의 자신의 4 개의 벽 또는 네트워크 안쪽에 체재하는 한. 라우터 IP를 통해 연결하려고하면 클라이언트는 훌륭한 오류 메시지를 생성합니다. 모든 일반적인 용의자가 제거되었습니다 : 라우터 포트 포워딩이 켜져 있고, 방화벽이 간섭하지 않습니다 (글쎄, 나는 그것을 꺼도 작동하지 않습니다). 그리고 canyouseeme.org는 내가 선택한 곳과 연결할 수 있다고 말합니다 포트에서 실행됩니다.Java 네트워킹 서버 - 클라이언트 오류

다음은 서버의 소스 코드입니다. 약간의 telnetting을 사용하여 명령 줄을 통해 이동하는 것이 가능하다는 것을 알았 기 때문에. I 연결을 설정하려고하면 , 그냥 말한다 Could not open connection to the host, on port 49163:Connection failed

서버 :

import java.net.*; 
import java.io.*; 

public class ChatServer { 
    public static void main(String[] args) throws IOException { 

     ServerSocket server = null; 

     try { 
      System.setProperty("java.net.preferIPv4Stack" , "true"); 
      server = new ServerSocket(49163); 
     } catch (IOException e) { 
      System.err.println("Could not listen on port: 49163."); 
      System.exit(1); 
     } 

     Socket client = null; 
     try { 
      client = server.accept(); 
     } catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.exit(1); 
     } 

     PrintWriter out = new PrintWriter(client.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(newInputStreamReader(client.getInputStream())); 
     String inputLine; 
     String outputLine; 

     out.println("Connection established"); 
     while ((inputLine = in.readLine()) != null) { 
      if (inputLine.equals("exit")) { 
       break; 
      } 
     outputLine = inputLine; 
     out.println(outputLine); 
     } 
     out.close(); 
     in.close(); 
     client.close(); 
     server.close(); 
     System.out.println("Server offline"); 
    } 
} 

이 오, 그래, preferIP4vStack 내가 유래에 집어 일이었다, 그러나 나를 위해 작동하지 않습니다.

어떤 이유인지 나는 클라이언트 코드를 삽입 할 수 없기 때문에 서식에 관한 메시지를 계속 받고 있으며 알아낼 수 없습니다. 하지만 내가 보는 방법은 명령 줄을 통해 연결할 수 없다 ("실제"IP에 연결하려고 시도 할 때) 클라이언트가 참여하지 않아도된다는 것입니다. 하지만 어쨌든 오류를보고 싶은 사람 :

java.net.ConnectException: Connection refused: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(Unknown Source) 
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at ChatClient.main(ChatClient.java:12) 
+0

예외를 발생시키는 (클라이언트?) 코드를 게시 할 수 있습니까? 또한 예외를 던지고있는 것과 동일한 스타일을 유지한다면 사용자 친화적 인 메시지 외에도 전체 스택 추적을 인쇄하는 것이 도움이 될 수 있습니다. – Windle

+0

비샬, 어떻게 알았습니까? –

+0

@NikolaiNFetissov : 내 실수. OP가 올바르게 언급 한 오류를 겪으면서 일부 탈출구가있었습니다. –

답변

0

나는 지금 웃거나 울지 맙니 다. 친구가 나에게 MAYBE에 대해 이야기했는데, 네트워크 인턴 PC에서 외부 IP로 로그인하려고 시도하는 것이 문제 일 수 있습니다. 일부 신비한 이유로 들어올 수 없거나 다시 들어올 수 없습니다. 시도하고 다른 곳에서 로그인 할 사람, 그리고 짜잔! 매력처럼 작동합니다.

0

이 아닌 포트 49163의 호스트에 열려있는 연결, 수 : 연결이

은하지 않았다 아니

에 실패했습니다. Java 메시지가 아닙니다. 당신의 코드는 당신이 ConnectException을 잡았을 때 더 자세한 메시지를 가지고 있다고 말했습니다. 그것을 인쇄하면 무엇이 잘못되었는지 찾아 낼 수 있습니다. 자신의 메시지를 만들고 예외가 당신에게 알려주는 것을 억제하는 것은 좋은 생각이라면 거의 존재하지 않습니다. 대상 호스트 또는 포트가 잘못있어 의미, 또는이
  • '연결 시간이 초과되었습니다'방화벽, 거기 인

    • '접속 거부'

      메시지는 아마 중 하나가 될 것입니다 네트워크 연결 문제

    • IP 라우팅 문제 인 'no route to host'
    • 'unknown host'이는 다시 서버 이름이 잘못되었음을 의미합니다.
  • +0

    자, 소켓을 만들기 전에 IPv4를 넣었습니다. – tr0n0m

    +0

    원래 질문을 편집하고 클라이언트 코드를 추가하려고했으나 형식이 올바르지 않다고 계속 말했습니다. 오류 메시지는 "connection refused : connect"입니다. – tr0n0m