2013-03-30 87 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你甚至不需要关闭那个套接字,你仍然可以从第二个套接字接收信息,这只是你不能发送新的数据到第一个服务器(我看你有一段时间是真正的循环),直到你完成与第二​​个socket的通信,这是一个延迟。如果延迟是一个问题,线程将是可预测的。 – ddmps

相关问题