Как реализовать 2 разных сервера, которые вызываются клиентом с одним и тем же объектом - PullRequest
0 голосов
/ 09 ноября 2019

Хи, я делаю некоторые упражнения, вот фон, чтобы знать. представьте, что вы - туристическое агентство

- вам нужно найти самый дешевый рейс для ваших клиентов

- они скажут вам, сколько миль они совершили полет

- в какую область онихочу сидеть, по умолчанию - бизнес - первый класс.

туристическое агентство является клиентом

, и есть 2 авиакомпании, где мы можем выбрать.

это 2 авиакомпании Airlines1: DreamLine (Server1), cloudLine (Server2),

эти серверы получают запрос через командную строку / клиент и рассчитывают их значение и возвращают его клиенту. просто например, server1 должен вернуть 200 €, а сервер 2 должен вернуть 600 €, расчет не является проблемой, больше того, как 2 сервера могут работать последовательно или одновременно

Моя проблема в том, что я не знаю, с чего начать, разделив серверы. ,Я уже реализовал оба сервера, но я получаю некоторые ошибки, потому что мне нужно создать очередь или реализовать дополнительный обработчик, который сообщает, какой сервер должен запуститься или какой сервер должен закончиться первым или что-то сделать. я уже пробовал только с одним сервером, это работает, но 2 idk, я думаю, они выпускают это то, что есть 2 открытых сокета, и это не разрешено, но я не нашел никакой информации для клиента, который отправляет запрос на 2 разных сервера, простос другой стороны, много клиентов на одном сервере, но это не то, что я ищу для

, было бы замечательно, если бы вы могли сказать мне, что я должен искать, когда я хочу работать с n серверами и только 1 клиентом

однажды уже получал различные ошибки: -адрес уже используется: JVM_Bind больше -сервер истек и т. Д.

здесь мой клиент тестовых классов:

открытый класс Client {

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:

публичный класс Server {

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);
}

}

server2:

publicclass Server2 {

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);
}

}

не могу найти ошибку, что я пропускаю

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

бесплатно для всех клиент-сервер, например, с 2 серверами и только 1 клиентом: перед тем, как запустить клиент, вам нужно сначала запустить серверы, чем запустить клиент

открытый класс Client {

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);
}

}

публичный класс Server {

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);
}

}

публичный класс Server2 {

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);
}

}

0 голосов
/ 09 ноября 2019

Вы можете использовать один сокет-клиент для подключения к нескольким серверам с помощью такой процедуры:

  1. Подключение к серверу1 с IP-адресом : порт <> (открыто) .
  2. Запрос данных на сервер1 >> (запись) .
  3. Ожидание ответа от сервера1 << <strong>(чтение) .
  4. отключение от сервера1 <> (закрыть) .

Повторите вышеуказанные шаги для сервера2. Помните: вы должны закрыть соединение с сервером1, прежде чем использовать тот же самый сокет-клиент для сервера2.

...