Processing of requests by client-server



  • There's the simplest client-server, you can connect to the server and send messages from the client, the server sends the message back.

    The puzzle is that it is sequential, in other words, the juket is occupied by one client and the rest must wait for the end. There are no examples in the forums of processing several clients simultaneously using the library concurrent

    I'm bringing the client and server code:

    Server:

    public class Server {
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        int port = 6666; //мой некий порт
        try {
            ServerSocket ss = new ServerSocket(port); // создаем сокет сервера и привязываем его к вышеуказанному порту
            System.out.println("Ожидание клиента");
    
            Socket socket = ss.accept(); // заставляем сервер ждать подключений и выводим сообщение когда кто-то связался с сервером
            System.out.println("Клиент подключился");
            System.out.println();
    
            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиенту. 
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
    
            // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout) {
            };
    
            String line = null;
            while (true) {
                line = in.readUTF(); // ожидаем пока клиент пришлет строку текста.
                System.out.println("От клиента я получил следующую строку : " + line);
                System.out.println("Отправляю обратно...");
                out.writeUTF(line); // отсылаем клиенту обратно ту самую строку текста.
                out.flush(); // заставляем поток закончить передачу данных.
                System.out.println("Жду следующую строку...");
                System.out.println();
            }
        } catch (Exception x) {
            x.printStackTrace();
        }
    }
    

    }

    Client:

    public class Client {

    public static void main(String[] args) {
       int serverPort = 6666; // порт к серверу, которому хотим присоединиться
        String address = "127.0.0.1"; // это IP-адрес компьютера, где исполняется наша серверная программа. 
                                      // Здесь указан адрес того самого компьютера где будет исполняться и клиент.
    
        try {
            InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес.
            System.out.println("Если ли кто-то, подключенный по этому адресу " + address + " и порту " + serverPort + "?");
            Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера.
            System.out.println("Соединение установлено.");
    
            // Берем входной и выходной потоки сокета, теперь можем получать и отсылать данные клиентом. 
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();
    
            // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения.
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);
    
            // Создаем поток для чтения с клавиатуры.
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            System.out.println("Введите что-нибудь, это будет отправлено на сервер и возвращено им.");
            System.out.println();
    
            while (true) {
                line = keyboard.readLine(); // ждем пока пользователь введет что-то и нажмет кнопку Enter.
                System.out.println("Отправляем строку на сервер...");
                out.writeUTF(line); // отсылаем введенную строку текста серверу.
                out.flush(); // заставляем поток закончить передачу данных.
                line = in.readUTF(); // ждем пока сервер отошлет строку текста.
                System.out.println("Сервер прислал ответ : " + line);
                System.out.println("Введите следующую строку...");
                System.out.println();
            }
        } catch (Exception x) {
            x.printStackTrace();
        }    }
    

    }

    How do we make the asynchronous processing of each client? And how to start a few clients, in fact, it's just two different projects in the non-bins, and starting the server first, then the client-- I'm launching two projects, and it's not working again.
    The button is gray.



  • Get a message from the client, create a new flow on the new juice. Socket number send to the client and close the connection. Next, the client is talking to a new flow.




Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2