Java ObjectOutputStream на Socket not flush () ing

Я работаю над сетевым приложением, написанным на 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 не так много ресурсов для начала. Я' Я буду обновлять этот вопрос по мере его изучения.

5
задан 1 March 2012 в 13:55
поделиться