如何实现 2 个不同的服务器,它们被具有相同对象的客户端调用

How to implement 2 different servers, which get called by client with the same object

嘿,我正在做一些练习,这里是要了解的背景。 想象你是一家旅行社

-您必须为您的客户搜索最便宜的航班

-他们告诉你他们飞行了多少英里

-他们想坐在哪个区域,默认 - 业务 - 第一class。

旅行社是客户

有2家航空公司可供选择。

这 2 家航空公司 airline1:dreamLine (Server1), cloudLine(Server2),

此服务器通过 commandline/client 获取请求并计算它们的值,然后 return 将其发送给客户端。 例如服务器 1 应该 return 200 欧元,服务器 2 应该 return 600 欧元, 计算不是问题,更多的是 2 个服务器如何按顺序或同时工作

我的问题是我不知道应该从哪里开始分离服务器。 我已经实现了两个服务器,但我遇到了一些错误,因为我需要创建一个队列或实现一个进一步的处理程序,它告诉应该启动哪个服务器或哪个服务器应该先结束或做任何事情。 我已经用一台服务器试过了,这有效,但是 2 idk 我认为他们的问题是打开了 2 个套接字,这是不允许的,但我没有找到任何关于将请求发送到 2 个不同服务器的客户端的信息,只是相反,许多客户端到一个服务器,但这不是我的意思搜索

当我想使用 n 个服务器和 1 个客户端时,如果你能告诉我应该搜索什么,那就太好了

曾经遇到过各种错误 - 地址已被使用:JVM_Bind 更多的 -服务器超时 等等

这是我的测试 classes 客户:

public class 客户 {

public static void main(String[] args) throws UnknownHostException, IOException {
    int number, temp, temp1, more;
    Scanner sc = new Scanner(System.in);
    Socket s = new Socket("localhost", 1342);
    Scanner sc1 = new Scanner(s.getInputStream());

    System.out.println("enter any number");

    number = sc.nextInt();
    PrintStream p = new PrintStream(s.getOutputStream());
    p.println(number);
    temp = sc1.nextInt();
    System.out.println(temp);
    sc.close();
    s.close();
    sc1.close();
    p.close();


    Scanner sc2 = new Scanner(System.in);
    Socket s2 = new Socket("localhost", 1343);
    Scanner sc3 = new Scanner(s.getInputStream());

    System.out.println("enter any number");

    number = sc.nextInt();
    PrintStream p1 = new PrintStream(s2.getOutputStream());
    p1.println(number);
    more = sc3.nextInt();
    System.out.println(temp);

    System.out.println(temp+ " " +more);
}

}

服务器 1:

public class 服务器 {

public static void main(String[] args) throws IOException {
    int number;
    int temp;
    ServerSocket s1 = new ServerSocket(1342);
    Socket ss = s1.accept();
    Scanner sc = new Scanner(ss.getInputStream());
    number = sc.nextInt();
    temp = number*2;
    PrintStream p = new PrintStream(ss.getOutputStream());
    p.println(temp);
}

}

服务器 2:

public class 服务器 2 {

public static void main(String[] args) throws IOException {
    int number;
    int temp;
    ServerSocket s1 = new ServerSocket(1343);
    Socket ss = s1.accept();
    Scanner sc = new Scanner(ss.getInputStream());
    number = sc.nextInt();
    temp = number*10;
    PrintStream p = new PrintStream(ss.getOutputStream());
    p.println(temp);
}

}

找不到我错过的错误

您可以使用一个套接字客户端连接到多个服务器,过程如下:

  1. 使用 ip 地址连接到服务器 1:端口 <> (打开).
  2. 向server1请求数据>> (写入).
  3. 等待服务器 1 的响应 << (读取).
  4. 断开服务器 1 <> (关闭).

对服务器 2 重复上述步骤。 请记住:在为服务器 2 使用相同的套接字客户端之前,您必须关闭与服务器 1 的连接。

所有客户端服务器免费示例,包含 2 个服务器和 1 个客户端: 在你 运行 客户端之前,你必须先 运行 服务器然后才能从客户端开始

public class 客户 {

public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException {
    int number, temp, temp1, more;
    Scanner sc = new Scanner(System.in);
    Socket s = new Socket("localhost", 1342);
    Scanner sc1 = new Scanner(s.getInputStream());

    System.out.println("enter any number");

    number = sc.nextInt();
    PrintStream p = new PrintStream(s.getOutputStream());
    p.println(number);
    temp = sc1.nextInt();
    System.out.println(temp);
    s.close();
    System.out.println("Server 1 closed!");

    Scanner scc = new Scanner(System.in);
    s = new Socket("localhost", 2555);
    Scanner sc2 = new Scanner(s.getInputStream());

    System.out.println("enter any number");

    number = scc.nextInt();
    p = new PrintStream(s.getOutputStream());
    p.println(number);
    more = sc2.nextInt();
    System.out.println(more);

    System.out.println(temp+ " " +more);
}

}

public class 服务器 {

public static void main(String[] args) throws IOException {
    int number;
    int temp;
    ServerSocket s1 = new ServerSocket(1342);
    Socket ss = s1.accept();
    Scanner sc = new Scanner(ss.getInputStream());
    number = sc.nextInt();
    temp = number*2;
    PrintStream p = new PrintStream(ss.getOutputStream());
    p.println(temp);
}

}

public class 服务器 2 {

public static void main(String[] args) throws IOException {
    int number;
    int temp;
    ServerSocket s1 = new ServerSocket(2555);
    Socket ss = s1.accept();
    Scanner sc = new Scanner(ss.getInputStream());
    number = sc.nextInt();
    temp = number*10;
    PrintStream p = new PrintStream(ss.getOutputStream());
    p.println(temp);
}

}