![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
IvanB |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
Суть вопроса отображена в названии.
У меня сокет-сервер, написанный на Java и сокет-клиент, написанный на ActionScript. И у этого клиента для всх входящих сообщений есть требование, чтобы они оканчивались нулевым байтом. В функции write :
Пробовал прописывать отправку следующим образом:
Также пробовал извлекать последний символ из входящих сообщений (Которые сервер вполне воспринимает) и отправлять его. Но Клиент такие сообщения не воспринимает. Есть какие нибудь предложения, кроме того, чтобы использовать другой клиент? ![]() --------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Вообще SocketOutputStream работает в бинарном режиме, и если в него записать 0, то он и передаст нулевой байт. Что это за переменная wr у тебя в примере?
-------------------- 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. |
|||
|
||||
RazIv |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
у меня таже проблема(( Это сообщение отредактировал(а) RazIv - 31.3.2006, 04:10 |
||||
|
|||||
IvanB |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
Это переменная для ввода данных в выходной поток сервера. Если прописать просто 0 - клиент не воспринимает. --------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
|||
|
||||
Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: нет Всего: 39 |
IvanB, вопрос наверное был, касаемо о типе(классе) данного объекта, если это BufferedWriter, как у RazIv, то, это символьный поток, и твой 0, перед тем как отправляться конвертиться и посылается соответствующим кодом. Лучше как сказал LSD, использовать SocketOutputStream, или можешь попробовать
char buf[]=new char[1]; buf[0]=0; wr.write(buf); или wr.write("\0"); попробуй, может получиться ЗЫ. Только сейчас увидел, что
Это сообщение отредактировал(а) Alexandr87 - 31.3.2006, 08:27 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Попробуй так:
Добавлено @ 11:01 Да, и еще один момент. Ты не указал явно кодировку для OutputStreamWriter, а это значит что он будет использовать умолчальную в системе. Если клиент и сервер будут на систмах с разными системными кодировками, будут проблемы. -------------------- 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. |
|||
|
||||
RazIv |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
Здесь сервер и клиент отправляют пакеты с UTF строками пример: 00000002|0000000F|00000004user00000003pas заголовок пакета|длина даных пакета|данные Это сообщение отредактировал(а) RazIv - 1.4.2006, 03:29 |
|||
|
||||
IvanB |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
По-моему проще было-бы с кодировками. Тем более даже в этом случае они понадобятся. --------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
1. OutputStreamWriter по умолчание использует не UTF. И вообще какую именно кодировку ты используешь UTF-8, UTF-16LE, UTF-16BE? 2. Пакет у тебя имеет бинарный формат: вначале идет заголовок (четыре фиксированных байта), затем длинна (4-х байтовое целое big-endian), затем уже данные в некоторой фиксированной кодировке. -------------------- 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. |
|||
|
||||
RazIv |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 27.3.2006 Репутация: нет Всего: нет |
попробуй так
|
|||
|
||||
IvanB |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
По-моему ты что-то не то написал.....
Т.к. wr.write - это метод, а не параметр. А если
--------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Странная проблема. Речь идет о символе "конец строки"? Он должен быть одинаков везде и java его вроде ставит автоматически. Надо наверное использовать класс PrintStream, заточенный под строки.
|
|||
|
||||
IvanB |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
По-моему всё-таки это не одно и тоже.....Или я не прав?
А можно поподробнее? Добавлено @ 16:16 А вот это по-моему неверно..... Поправьте, если не так. Это сообщение отредактировал(а) IvanB - 3.4.2006, 16:39 --------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Вы же пишете, что требуется чтобы сообщения кончались нулевым байтом. Если вы пишете в поток текстовую строку, то она обычно кончается специальным символом. Конец строки или перевод строки. И читающая сторона берет строку целиком. Для работы со строками специальные методы есть в java, наверное и во Флаше тоже (типа readLine, println). Символы конца строки конечно могут быть разными для разных операционных систем. Но вы то пользуетесь средствами программирования для интернета, здесь должно быть уже согласовано или есть возможность согласовать через выбора нужного класса или настройки. Вручную конец текстовой строки писать - это немного странно выглядит. Или клиент на Флаше написан без использования стандартного протокола? Это сообщение отредактировал(а) COVD - 3.4.2006, 18:09 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
PrintStream заканчивает строку line separator-ом принятым на той платформе где запущена JVM. Он не предназначен для гетерогенного обмена данными. IvanB, ты пробовал тот код, что я написал? -------------------- 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. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |