Skip to main content

"Дилър на автомобили" 🚗 💰

Splash

Условие на задачата

Създайте конзолно приложение, което имитира дейността на дилър на автомобили. Приложението трябва да включва две части - сървър и клиент.

Сървър (Дилър)

  • Сървърът трябва да бъде реализиран като сокет сървър, който слуша за връзки на определен порт.
  • Дилърът има списък с автомобили за продажба от тип Car. Всяка кола има марка, модел и цена.
  • Сървърът трябва да приема заявки от клиентите.
  • Дилърът може да работи с до 3 клиента едновременно, но може да има голям pool от клиенти, които чакат на опашка.
  • Ако клиентът подаде низ във формата "Марка модел" (например "Toyota Corolla"), сървърът трябва да провери дали има такава кола в списъка с автомобили за продажба и, ако да, да върне цената и информацията за колата.
  • Ако клиентът подаде цял обект Car, сървърът трябва да изчисли цената на автомобила по някаква формула и да я върне на клиента.
  • След това сървърът трябва да попита клиента дали иска да продаде автомобила си. Ако клиентът потвърди, колата трябва да бъде добавена към списъка с автомобили за продажба на дилъра, а клиентът да получи сумата от продажбата.

Клиент

  • Клиентът трябва да може да се свърже със сървъра по определен IP адрес и порт.
  • Клиентът трябва да има възможност да изпрати заявка за покупка на автомобил по марка и модел, както и да изпрати цял обект Car към сървъра за оценка.
  • Клиентът трябва да получи отговор от сървъра с цената на автомобила или информация за колата след заявка.
  • Клиентът трябва да има опция да продаде своя автомобил на дилъра и да получи сумата от продажбата.

Съвети и насоки

  1. Създаване на сокет сървър: Погрижете се сървърът ви да слуша на определен порт и да приема връзки от клиенти. Използвайте ServerSocket в Java за тази цел.

    serverSocket = new ServerSocket(port);
    Socket clientSocket = serverSocket.accept();
  2. Обработка на множество клиенти: Разгледайте използването на ExecutorService за създаване на thread pool, който да обработва множество клиентски връзки едновременно.

    pool = Executors.newFixedThreadPool(3);
    pool.execute(new ClientHandler(clientSocket));
  3. Четене и писане на потоци: Използвайте PrintWriter и BufferedReader за изпращане и получаване на съобщения между сървъра и клиента.

    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  4. Обработка на заявки от клиента: Използвайте условни конструкции (например switch или if-else), за да разпознаете и обработите различни типове заявки от клиента.

    String request = in.readLine();
    switch (request) {
    case "PRICE":
    // обработка
    break;
    case "EVALUATE":
    // обработка
    break;
    // други случаи
    }
  5. Управление на списък с автомобили: Поддържайте списък с автомобили, като използвате колекция в Java, например ArrayList, и уверете се, че той е достъпен и управляем от методите, които обработват клиентските заявки.

Забавлявайте се със създаването на вашето "Дилър на автомобили" приложение! 🚗💵