Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将客户端连接到多个服务器_Java_Sockets_Tcp - Fatal编程技术网

在Java中将客户端连接到多个服务器

在Java中将客户端连接到多个服务器,java,sockets,tcp,Java,Sockets,Tcp,我希望客户端连接到多个服务器。i、 e.我希望我的客户向服务器1发送一个数字,该服务器将数字平方并将其回显给客户。但是,我希望客户端随后将这个平方数发送到另一个服务器,该服务器在另一个端口上侦听 我不知道如何实现这个功能,我可以通过线程来实现,还是只打开第二个套接字到server2 这是我客户的代码 import java.io.*; import java.net.*; public class ClientA { public static void main(String[]

我希望客户端连接到多个服务器。i、 e.我希望我的客户向
服务器1
发送一个数字,该服务器将数字平方并将其回显给客户。但是,我希望客户端随后将这个平方数发送到另一个服务器,该服务器在另一个端口上侦听

我不知道如何实现这个功能,我可以通过线程来实现,还是只打开第二个套接字到
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

根据您提供的信息,我认为没有必要将其设置为多线程应用程序,因为当您收到第一台服务器的回复时,您只向第二台服务器发送(即不接收)数据。只需设置另一个套接字到另一个地址,并在从第一台服务器获取数据时发送数据。

收到响应后是否需要保持与第一台服务器的连接?但是,如果我确实需要从第二台服务器接收信息?那么我需要使它成为多线程的吗?或者我可以关闭第一个服务器的套接字并打开第二个服务器的套接字吗?@user1896168您甚至不需要关闭该套接字,您仍然可以从第二个套接字接收信息,只是您无法向第一个服务器发送新数据(我发现您有一个while true循环)直到您完成与第二个套接字的通信,这是一个延迟。如果延迟是个问题,那么线程将是可预缓存的。