Сокеты Java: Программа останавливается на socket.getInputStream () без ошибки? - PullRequest
9 голосов
/ 18 ноября 2011
InetAddress host = InetAddress.getLocalHost();
Socket link = new Socket(host, Integer.parseInt(args[0]));
System.out.println("before input stream");
ObjectInputStream in = new ObjectInputStream(link.getInputStream());
System.out.println("before output stream");
ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());

"перед входным потоком" - это последний символ жизни в строке cmd. Исключений нет. Почему это происходит? Я не понимаю ...

args [0] - 5000. // edit: flush не помогает.

Ответы [ 2 ]

18 голосов
/ 18 ноября 2011

Это потому, что ObjectInputStream(InputStream in) -конструктор является блокирующим вызовом, если inputStream пуст.

Цитата

Создает ObjectInputStream, который читает из указанного InputStream. Заголовок потока сериализации считывается из потока и проверяется. Этот конструктор будет блокировать , пока соответствующий ObjectOutputStream не напишет и не очистит заголовок.

0 голосов
/ 18 ноября 2011

Возможно,

link.getInputStream(); 

может возвращать ноль, хотя это должно вернуть ошибку, просматривая файлы классов.Еще одна вещь, которую я заметил, это то, что вы объявляете:

ObjectInputStream out = new ObjectOutputStream(link.getOutputStream());

Исходя из этого, вы указываете ObjectInputStream как ObjectOutputStream без приведения (в данном случае не подходит)

, вам следует попробовать:

ObjectOutputStream out = new ObjectOutputStream(link.getOutputStream());

Это должно работать, так как скрипт может поставить System.out в очередь, но заметить ошибку, прежде чем он может быть инициализирован.

Скажите, работает ли это: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...