2014-05-11 6 views
1

by Oracle 제공된 클라이언트/서버 자습서 예제를 약간의 조정을 시도하여 테스트하려고합니다.자바 클라이언트/서버 소켓 프로그램 - 서버가 클라이언트 요청에 응답하지 않음

이상적으로는 내 클라이언트의 BufferedReader stdIn에 "print stuff"라고 쓰고 서버는이 문자열을 받으면 "클라이언트와 서버가 연결되었습니다!"라는 메시지를 인쇄합니다.

내 코드가 컴파일되어 연결에 성공한 것처럼 보입니다. 그러나, 내 서버는이 시점에서 아무 것도 인쇄하지 않습니다.

다음

내 클라이언트 코드 :

public class myClient { 

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

    String hostName = // my computer's local host name; 
    int portNumber = 4444; 

    try ( 
     Socket clientSocket = new Socket(hostName, portNumber); 
     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
    ) { 
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 

     // Tell server to print line "Client and server have connected!"; 
     String fromServer; 
     String fromUser; 

     while ((fromServer = in.readLine()) != null) { 
      if (fromServer.equals("End")) 
       break; 

      fromUser = stdIn.readLine(); 

      if (fromUser != null) 
       out.println(fromUser); 
     } 

    } catch (UnknownHostException e) { 
     System.err.println("Don't know host!"); 
     System.exit(1); 
    } catch (IOException e) { 
     System.err.println("IO Exception caught!"); 
     System.exit(1); 
    } 

} 

} 

는 IS 다음 내 서버 코드 :

public class myServer { 

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

    int portNumber = 4444; 

    try (
     ServerSocket serverSocket = new ServerSocket(portNumber); 
     Socket clientSocket = serverSocket.accept(); 

     PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
    ) { 

     // if receieved string is "print stuff", print "Client and server have connected!"; 
     String inputLine; 

     while ((inputLine = in.readLine()) != null) { 
      if (inputLine.equals("End")) 
       break; 

      // try to echo input stream - no output! 
      out.println(inputLine); 

      if (inputLine.equals("print stuff")) 
       out.println("Client and server have connected!"); 
     } 

    } catch(IOException e) { 
     System.err.println("Exception caught while trying to listen to port!"); 
    } 

} 

}

+0

서버가 클라이언트에서 콘솔로 수신하는 모든 행을 인쇄하십시오. 이렇게하면 디버깅이 훨씬 쉬워집니다. – ruediste

+0

@ruediste 왜 내가 이것을 생각하지 않았는지 모르겠다. 그냥 시도해 보았다. (내 코드를 수정했다.) 아무 것도 프린트되지 않았다. – user2893128

답변

2

첫 번째 버그는 클라이언트가 서버로부터 입력을 기다립니다이다 연결 후, 서버는 아무것도 보내지 않습니다. 따라서 사용자 입력 루프가 실행되지 않습니다.

두 번째 버그는 "인쇄물"을 입력하지 않는 한 서버가 클라이언트에 아무 것도 응답하지 않는다는 것입니다. 그래서 다시 클라이언트는 서버로부터의 입력을 기다리고, 사용자로부터의 입력을 기다린다.

+0

매력을 발휘했다! 고맙습니다! – user2893128

관련 문제