2013-03-30 5 views
1

클라이언트가 둘 이상의 서버에 연결되기를 원합니다. 즉, 고객이 숫자를 으로 전송하여 번호를 제곱하고 클라이언트에 다시 표시되도록합니다. 그러나 클라이언트가이 제곱 된 번호를 다른 포트에서 수신하는 두 번째 서버로 보내길 원합니다.클라이언트를 Java의 여러 서버에 연결

이 기능을 구현하는 방법을 모르겠다. 스레드를 통해이 작업을 수행 할 수 있습니까? 또는 server2에 두 번째 소켓을 열면됩니까?

다음은 내 고객을위한 코드입니다. 당신은 단지 당신이받을 때 두 번째 서버에 데이터를 (즉, 수신하지 않음) 보내는 당신이 제공 한 정보를 바탕으로

import java.io.*; 

import java.net.*; 

public class ClientA { 
    public static void main(String[] args) { 

    String serverhost = "localhost"; 
    int serverport = 6789; 

     Socket clientSocket = null; 
     DataOutputStream os = null; 
     BufferedReader is = null; 

    try { 
      clientSocket = new Socket(serverhost, serverport); 
      os = new DataOutputStream(clientSocket.getOutputStream()); 
      is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
     } catch (UnknownHostException e) { 
      System.err.println("Don't know about host: " + serverhost); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for the connection to: " + serverhost); 
     } //end try 

if (clientSocket == null || os == null || is == null) { 
     System.err.println("An error has occured, please restart."); 
     return; 
    } //end if 

    try { 
     while (true) { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String keyboardInput = br.readLine(); 
     os.writeBytes(keyboardInput + "\n"); 

     int n = Integer.parseInt(keyboardInput); 
     if (n == 0) { 
      break; 
     } 

     String responseLine = is.readLine(); 
     System.out.println("Server returns its square as: " + responseLine); 
     } 

     os.close(); 
     is.close(); 
     clientSocket.close(); 
    } catch (UnknownHostException e) { 
     System.err.println("Trying to connect to unknown host: " + e); 
    } catch (IOException e) { 
     System.err.println("IOException: " + e); 
    } //end try 
    } //end main 
} //end class 
+0

응답을받은 후 첫 번째 서버에 대한 연결을 유지해야합니까? – ddmps

+0

@Pescis 아니요. – user1896168

답변

0

, 나는 그것을 멀티 스레드 응용 프로그램을 만들 필요가 표시되지 않습니다 첫 번째 서버의 응답. 다른 주소에 두 번째 소켓을 설정하고 첫 번째 서버에서 가져올 때 데이터를 보냅니다.

+0

그러나 두 번째 서버에서 정보를 받아야합니까? 그럼 다중 스레드로 만들어야합니까? 아니면 그냥 첫 번째 서버 소켓을 닫고 두 번째 소켓을 열 수 있습니까? – user1896168

+0

@ user1896168 당신은 그 소켓을 닫을 필요조차 없다, 당신은 여전히 ​​두 번째 소켓에서 정보를받을 수있다, 그것은 단지 당신이 첫 번째 서버에 새로운 데이터를 보낼 수 없을 것입니다.) 두 번째 소켓과 통신이 끝날 때까지 기다려야합니다. 지연이 문제라면, 스레드는 우선 가능할 것이다. – ddmps

관련 문제