Передача данных клиентам через сервер

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

Я новичок в Java, поэтому для меня это довольно сложно. В настоящее время у меня есть конструктор, который устанавливает соединение с сервером, и сервер ответит, когда соединение будет успешным (на данный момент это работает).

Мое приложение представляет собой программу с графическим интерфейсом, поэтому я подумал, что лучше всего будет разместить соединение в paintComponent, поскольку к нему привязан таймер, поэтому я надеялся, что каждый тик таймера будет отправлять данные на сервер, однако это просто дает сбой. программа.

Что было бы лучшим способом -

  • Отправлять данные от клиента к серверу
  • Получать данные на сервере
  • Отправить данные с сервера другому клиенту

Это моя конечная цель.

Мой код очень простой, я действительно не знаю, что делать дальше -

Клиент -

Socket clientSocket = null;
  DataOutputStream os = null;
  BufferedReader is = null;

  String request;
  String responseLine;
  String data;

  try {
     clientSocket = new Socket("LocalHost", 5000);
     os = new DataOutputStream(clientSocket.getOutputStream());
     is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  }  catch (UnknownHostException e) {
        System.err.println("Dont know host name!");
     }
     catch (IOException e) {
        System.err.println("Couldnt get I/O for connection");
     }

  if (clientSocket != null && os != null && is != null) {
     try {
        request = "Hello Server \n";
        os.writeBytes(request);
        System.out.println("Client: " + request);

        if ((responseLine = is.readLine()) != null){
           System.out.println("SERVER: " + 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);
     }
   }

Сервер -

ServerSocket service = null;
  Socket server = null;

  BufferedReader is;
  DataOutputStream os;

  String line;

  try {
     service = new ServerSocket(5000, 2);
  } catch (IOException e) {
     System.out.println(e);
    }

  try {
     server = service.accept();
     is = new BufferedReader(new InputStreamReader(server.getInputStream()));
     os = new DataOutputStream(server.getOutputStream());

     if ( (line = is.readLine()) != null) {
     String text = is.toString();
     System.out.println("Data: " + text);
     }
     os.close();
     is.close();
     server.close();
  }
     catch (IOException e) {
        System.out.println(e);
     }   
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
184
1

Ответы 1

  1. Вы ничего не назначили на request.

  2. Если у вас есть, вне кода, который вы опубликовали, он не содержит терминатора строки, поэтому вы читаете строки, но не пишете строки.

  3. Вы смешиваете потоки с читателями и писателями.

  4. Вы перехватываете исключения, а затем продолжаете действовать так, как будто их не произошло. Код, который зависит от успеха кода в предыдущем блоке try, должен находиться внутри того же блока try.

Другие вопросы по теме