Я пишу клиентское/серверное приложение, в котором сервер отправляет сериализуемые объекты клиенту через ObjectOutputStream (я буду называть его oos с этого момента), и клиент получает их с ObjectInputStream ("ois" впредь).Блокировка ObjectInputStream в readObject()
Теперь, поскольку сначала выполняется сервер, я сначала инициализирую oos. Как и должно быть. Вот как я инициализировать его:
OutputStream outStream=incoming.getOutputStream();
DataOutputStream outToClient=new DataOutputStream(outStream);
outToClient.flush();
ObjectOutputStream oos = new ObjectOutputStream(outStream);
oos.flush();
Затем я запустить клиент и я инициализировать OIS с этим строки:
inStream = clientSocket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(inStream);
С этого момента, на стороне сервера будет посылать множество объектов на том же потоке это путь:
oos.writeUnshared(wishes);
в течение цикла. Проблема в том, что когда я выполняю этот проклятый код на моем компьютере, все в порядке. Никаких проблем. Когда я пытаюсь использовать две разные машины, появляется тупик. Клиентская сторона остается навечно на этой линии:
tempWishes = (ArrayList<String>) ois.readObject();
Не стесняйтесь спрашивать о более подробной информации. Я не разделял весь код клиента и сервера, потому что это как 500 строк кода.
Вы уверены, что вы видели тупик, а не блокировку, что указывает на совершенно иную проблему? Если это действительно тупик, какие блокировки? – neurite
Звучит как проблема буферизации. Перед записью объектов со стороны сервера убедитесь, что вы сбрасываете() или закрываете() 'oos'. –
Уже используется flush(). Благодаря! – Andrew