Я работаю над сетевым приложением, написанным на Java, использующим ObjectOutputStream и ObjectInputStream поверх Sockets для обмена сообщениями. Мой код выглядит так:
Отправитель:
ObjectOutputStream out;
ObjectInputStream in;
try{
Socket socket=new Socket(address, port);
socket.setSoLinger(true, socketLingerTime);
out=new ObjectOutputStream(socket.getOutputStream());
out.writeObject(message);
out.flush();
out.close();
}catch (variousExceptions)...
Получатель:
Object incoming;
try{
incoming=myObjectInputStream.readObject();
}catch (SocketException socketError)
{
if (socketError.getMessage().equals("Connection reset"))
{
//this is the exception I get
}
}
Иногда сообщение проходит нормально, но иногда я получаю помеченное исключение вместо объекта. Разве flush не должен заставить сообщение перейти на другую сторону? Я как-то неправильно использую функцию? Или это какая-то ошибка в основном сетевом коде Java / OS?
Спасибо!
ОБНОВЛЕНИЕ:
Я еще немного проследил за этим, и похоже, что это происходит только тогда, когда ресурсы системы заняты что-то облагается налогом. Мне не удалось воспроизвести его за пределами VirtualBox, но это могло быть просто потому, что у VirtualBox не так много ресурсов для начала. Я' Я буду обновлять этот вопрос по мере его изучения.