2014-04-20 3 views
-1

서버와 클라이언트가 서로 메시지를 보내는 클라이언트 - 서버 프로그램을 작성하고 싶습니다. 첫째, 내 서버가 클라이언트에게 메시지를 보낸 다음 클라이언트가 응답합니다. 그런 다음 내 서버가 다른 메시지 인 클라이언트 응답을 보냅니다. 문제는 서버에서 유도 한 첫 번째 메시지에서 클라이언트가 응답하지 않는다는 것입니다. 내 서버 :Java 소켓 : 클라이언트가 서버에 응답하지 않는 이유

public class Server { 
public void go() { 
    try { 
     ServerSocket serverSocket = new ServerSocket(9999); 
     System.out.println("Server listening ..."); 
     Socket socket = serverSocket.accept(); 
     try (
      PrintWriter printWriter = new PrintWriter(socket.getOutputStream()); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     ) { 
      String input; 
      printWriter.println(new Scanner(System.in).nextLine()); 
      while ((input = bufferedReader.readLine()) != null) { 
       System.out.println(input); 
       printWriter.println(new Scanner(System.in).nextLine()); 
       if(input == "Bye") break; 
      } 
     } 


    } catch (IOException ioException) { 
     ioException.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 
    Server server = new Server(); 
    server.go(); 
} 

}

내 클라이언트 :

public class Client { 

public void go() { 
    try { 
     try (
      Socket socket = new Socket("localhost", 9999); 
      PrintWriter printWriter = new PrintWriter(socket.getOutputStream()); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     ) { 
      String input; 
      while ((input = bufferedReader.readLine()) != null) { 
       System.out.println("1"); 
       System.out.println(input); 
       printWriter.println(new Scanner(System.in).nextLine()); 
      } 
     } 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 
    Client client = new Client(); 
    client.go(); 
} 

}

내 코드 몇 가지 문제가 있습니까?

+0

방법을'ServerSocket의 # 동의()'연결에 대한 수신 대기이 소켓에 그것을 수용한다. 메서드는 연결될 때까지 차단됩니다. –

답변

0

클라이언트가 연결 한 다음 서버에서 행 읽기를 차단합니다.

서버가 연결을 허용 한 다음 클라이언트에서 회선 읽기를 차단합니다.

나는 당신이 다음에 어떤 일이 일어날 지 모른다. 그러나 그렇지는 않을 것이다. 누군가 뭔가를 보내야합니다.

+0

저는 서버 클라이언트 프로그래밍에 초보자입니다. "블록을 읽는 것"이 ​​무슨 의미인가요, 제 클라이언트가 서버에 응답하고 서버가 클라이언트에게 메시지를 보내길 원합니다. –

+0

무엇에 응답합니까? 모두가 받고 있으며 아무도받을 것을 보내지 않습니다. – EJP

+0

어떻게 누군가 다른 사람에게 무언가를 보낼 수 있습니까? –

0

코드가 양호한 것 같습니다. 당신은 그냥 쓰기 후() 플러시 호출하여 인프라를 밀어해야합니다

printWriter.flush(); 
관련 문제