Конструктор ObjectInputStream зависает в программе

Я перепробовал все возможные решения этой проблемы.

server = new ServerSocket(9421);
client = new Socket("localhost", 9421);
out = new ObjectOutputStream(client.getOutputStream());
out.flush();
System.out.println("Starting input streams");
in = new ObjectInputStream(client.getInputStream());
System.out.println("input streams are now running");

Все говорит мне объявить objectInputStream перед ObjectInputStream. В других местах мне говорят сбросить поток вывода объекта. Этот код просто подвешивает программу и ждет так называемый заголовок.


person StackDoubleFlow    schedule 22.11.2017    source источник
comment
Извините, но то, что вы опубликовали, указывает на то, что вам нужно отступить от непосредственной проблемы и изучить некоторые уроки по программированию сокетов в Java. Переход от этого к рабочему коду слишком широк для StackOverflow.   -  person Jim Garrison    schedule 22.11.2017


Ответы (1)


Все говорит мне объявить objectInputStream перед ObjectInputStream.

Нет, он говорит вам построить ObjectOutputStream перед ObjectInputStream, и вы это делаете.

В других местах мне говорят сбросить поток ввода объекта.

Нет, тебе говорят смыть ObjectOutputStream, и ты тоже это делаешь.

Читай точно.

Этот код просто подвешивает программу и ждет так называемый заголовок.

Это точно на 100% правильно. В этом нет ничего «так называемого». И ничто не написало заголовок. Узел еще не построил свой ObjectOutputStream, и этот код будет блокироваться до тех пор, пока он этого не сделает, или не отключится, или сеть не прервется.

На самом деле одноранговый узел даже не принял соединение. Вы не можете запустить весь этот код в одном потоке. Для ServerSocket требуется отдельный поток цикла принятия, и этот поток должен запускать дополнительный поток для каждого принятого сокета, который создает потоки объектов в том же порядке.

person user207421    schedule 22.11.2017