Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача объектов, путаются данные 
V
    Опции темы
BSOD
Дата 4.6.2010, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 1.11.2004
Где: Гомель

Репутация: нет
Всего: 3



Пишу сетевую игру. Для передачи данных использую сериализацию объектов в сеть.
Если данные шлются редко - проблем вроде бы нет. Но, если я начинаю активно посылать одинаковые объекты один за одним, то рано или поздно что-то сбивается и очередной объект доходит не таким, как был послан => exception

Код

Exception in thread "Network client thread." java.lang.ClassCastException: cannot assign instance of server.battles.manager.BattleTaskInfo to field server.engine.scheduler.SchedulerMessage.messageType of type server.engine.scheduler.SchedulerMessage$MessageType in instance of server.engine.scheduler.SchedulerMessage


здесь:
Код

Object data = null;
                try {
                    data = from.readObject();
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
                }


а объект формировался здесь:

Код

protected synchronized void sendTaskList(User user, SchedulerQuery query) {
    List<SchedulerTaskInfo> infos = new ArrayList<SchedulerTaskInfo>();
    int i = 0;
    for (SchedulerTask task : allTasks.values()) {
        if (task.getTaskInfo().getTaskClass() == SchedulerTaskInfo.TaskClass.USER_TASK)
        infos.add(task.getTaskInfo());
    }
    Collections.sort((List)infos);
    if (user != null && user.getProtocol() != null)
        user.getProtocol().send(phoneName, new SchedulerMessage(SchedulerMessage.MessageType.TASK_LIST,infos.toArray()));
    }


сама передача данных:

server:
Код

.........
                Socket clientSocket = serverSocket.accept();
        ClientThread clientThread = new ClientThread(clientSocket);
..........

tread:
Код

.........
    protected ObjectInputStream from = null;
    protected ObjectOutputStream to = null;
.........

from = new ObjectInputStream(this.socket.getInputStream());
to = new ObjectOutputStream(this.socket.getOutputStream());

.........
while (runned && socket.isConnected()) {
        try {
        while (protocol.hasMessages()) {
            ProtocolMessage message = protocol.getNextMessage();
            to.writeObject(message);
        }
        } catch (IOException ex) {
        disconnect();
        }
        try {
        Thread.sleep(100);
        } catch (InterruptedException ex) {
        Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



отсюда вопрос:
Гарантируется ли, что при таком способе передачи данные будут приходить в том порядке, в котором были посланы.
И проверяется ли как-нибудь правильность пришедших данных?
Ну и конечно же, в какую сторону мне копать, где искать ошибку?

Добавлено через 4 минуты и 34 секунды
да, вот еще:
ексепшны вылетают довольно разные, вот, только что, при тех же действиях
на клиете:
Код

java.io.StreamCorruptedException: invalid type code: 90


на сервере:
Код

java.net.SocketException: Connection reset



--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
BSOD
Дата 4.6.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 1.11.2004
Где: Гомель

Репутация: нет
Всего: 3



Все, нашел ошибку. Чертова многопоточность :(


--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.