Почему мой клиент (Обработка) не может читать с ServerSocket (Java)? - PullRequest
1 голос
/ 21 мая 2019

Я написал некоторый код на Java и Processing, потому что мне интересно, как я могу общаться между различными языками программирования.
В этом случае я хочу написать «вычислительную» программу на Java и визуализировать ее с помощью Processing.

Я пытался настроить серверы в обоих направлениях, но я ничего не мог прочитать с серверов :(

Java:

-------- Accepting clients --------
try {
  ServerSocket server = new ServerSocket(55000);

  System.out.println("Server started");

  while (true) {
    client = server.accept();
    handleConnection(client);
  }
} catch (IOException ex) { ... }


-------- handleConnection --------
System.out.println("Connection accepted");
try {
  PrintWriter os = new PrintWriter(client.getOutputStream());

  char[] buffer = "This is a wonderful sentence!".toCharArray();            

  for (char c : buffer)
    os.write(c);

  client.close();            
} catch (IOException ex) { ... }

Обработка:

-------- Setup client --------
Client client = new Client(this, "127.0.0.1", 55000);

-------- Draw function (frame rate: 10) --------
try {    
  if (client.available() > 0)
    print(client.readChar());
  } catch (NullPointerException ex) {
    println("NullPointer");
  }

Я ожидал, что предложение будет записано в консоль обработки, но я получаю только сообщение «Клиент получил конец потока».

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Похоже, вы используете DataInputStream в клиенте. Вы должны использовать это, только если вы планируете отправлять / получать сериализованные объекты. Я сделал немало программирования сокетов и никогда не хотел / не хотел использовать DataInputStream ... Попробуйте просто использовать простые сокеты - это проще.

0 голосов
/ 22 мая 2019

Я нашел ошибку;это проблема PrintWriter / сброса, потому что PrintWriter не очищает поток автоматически.«Ручная» очистка / использование OutputStream напрямую решила проблему.

...