2012-06-29 4 views
0

Я пытаюсь вызвать метод из другого класса, что означает, что я хочу использовать сериализацию. Я делаю объект имени метода и его параметров и записываю его в сокет, но когда Я хочу, чтобы ObjectOutputStream столкнулся с ошибкой «сброс соединения с ошибкой сокета: сокет» Я искал возможные причины, но я не нашел подходящего ответаjava Исключение: сброс соединения с помощью peer: ошибка записи сокета

на стороне сервера Я не закрывал сокеты или я не делал никакой работы, чтобы закрыть, что я не знаю, что происходит потом: - ??

в строке:

ObjectOutputStream oos = (new ObjectOutputStream(os)); 

и мой кусок кода это:

InvocationVO invo = new InvocationVO("showStart", treasure, round); 

for (int i = 0; i < numPlayer; i++) { 
    OutputStream os = socket.get(i).getOutputStream(); 
    ObjectOutputStream oos = (new ObjectOutputStream(os)); // this has error 
    oos.writeObject(invo); 

    oos.close(); 
    os.close(); 
    Client.getClients()[i].invoke(); 
} 

спасибо за ваш помогает заранее!

ответ

5

Вы пишете соединение, которое уже было закрыто сверстником. Мне трудно поверить, что не оказалось в вашем поиске. Причиной проблемы является, во-первых, то, что вы закрываете oos и, следовательно, сокет в этом коде, поэтому (а) он не будет работать во второй раз и (b) закрытие сокета приводит к тому, что одноранговое устройство получит условие EOS и закройте сокет, поэтому (c) во второй раз, когда вы запустите этот код, вы столкнетесь, по крайней мере, с двумя проблемами.

Существует третья проблема, которую вы еще не ударили. Вы создаете новый ObjectOutputStream каждый раз, когда вы запускаете этот код, а не используете тот же самый для жизни сокета. То же самое касается ObjectInputStream, где бы вы его ни использовали. Если вы делаете то, что вы здесь делаете, вы можете столкнуться с StreamCorruptedException: invalid type code.

+0

действительно спасибо за ваш ответ. О, я написал это неправильно и исправил его, но я все еще сталкиваюсь с той же ошибкой. Я не мог получить последовательность закрытия потоков и сокета. У меня есть массив Список игроков Сокеты в игре, которая должна быть открыта до окончания игры, в нескольких методах, которые я должен написать или прочитать в некоторых сокетах, пожалуйста, помогите мне в этом и скажите мне практический способ ее решить !? Большое спасибо – user1323163

+0

: что, если я напишу следующим образом: "(новый ObjectOutputStream (socket.get (i) .getOutputStream())). writeObject (invo);" но он по-прежнему имеет ту же ошибку – user1323163

+0

@ user1323163 Тогда у вас все еще есть все те же проблемы. Я не знаю, почему вы думаете, что это улучшение. Это не так. – EJP

Смежные вопросы