![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Dude03 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
Есть сервер, который читает сериализованный объект из файла и потом отсылает его клиенту.
Вот код сервера, который отправляет данные:
Вот кусочек класса UdpWrapper
А теперь принимающий код:
w.nextLine().getBytes() - возвратит все байты сериализованного объекта. Проблема в том, что(мало того) проверку на то, что пришел именно объект, надо производить вот так:
Так и байты с кодом 0x98 меняются при передаче на 0x3f(вообще мистика). Проверял сравнением исходного сериализованного объекта с тем, что получается после отправки. Это сообщение отредактировал(а) Dude03 - 22.4.2007, 11:10 |
||||||||
|
|||||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Что-то вообще ничего из твоего кода не ясно. То ты говоришь, что используешь сериализацию. То в UdpWrapper передаешь массив строк.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Dude03 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
Я передаю массив строк, чтобы потом его отправить одним пакетом. Разделители между строками - знаки переноса строки("\n"). Строки накапливаются:
А потом одним пакетом отсылаются:
Когда клиенту приходит пакет, он смотрит на первые 2 байта, чтобы проверить магическое число(вдруг это объект), тогда весь он пишется в отдальную строку. Проблема в том, что байты как-то странно меняются(и магическое число, и некоторые байты самого объекта), и поэтому возникает эксепшен. |
||||||
|
|||||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: нет Всего: 39 |
Протокол UDP не гарантирует доставку всех пакетов и не гарантирует, что доставленные пакеты будут выстроены в том порядке, в котором были отправлены. Может быть дело в этом? Попробуй посмотреть каким-ндь анализатором траффика, типа wireshark, в каком порядке пакеты к тебе приходят.
|
|||
|
||||
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
нет, дело не в этом. У меня одна команда - один пакет с ответом. Пока первая команда не была отбработана, то второй не будет. Вот небольшой пример, который показывает проблему=(. Необходимо смотреть файл Primer.java. Все остальное - это то, что сериализуется. Нечто происходит именно, когда происходит операция stringDb.getBytes(). Так что
выведет "Failure=(". Конечно, может быть проблема в том, что джава отводит на char 2 байта. Или может проблема в кодировке. Это сообщение отредактировал(а) Dude03 - 22.4.2007, 15:34 Присоединённый файл ( Кол-во скачиваний: 4 )
primer.rar 5,53 Kb |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Вот объясни зачем нужно вначале преобразовывать массив байт в строку (при том что там явно содержатся бинарные данные), а затем из строки снова получать массив байт?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
||||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Передавай в DatagramPacket сразу данные из ByteArrayOutputStream, без всяких строк. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Dude03 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.4.2006 Репутация: нет Всего: 6 |
||||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Максимальная длина пакета UDP приблизительно от 500 до 1500 байт. UDP - не лучший выбор для вашей задачи.
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Полностью согласен. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |