![]() |
Модераторы: 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. |
|||
|
||||
IvanB |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
Пробовал. Клиент всё равно не реагирует.
--------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
|||
|
||||
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. |
|||
|
||||
IvanB |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 23.5.2005 Где: Irkutsk Репутация: нет Всего: 5 |
У него при событии
выводятся полученные данные. У сервера также. Данные от клиента приходят с неопределённым символом в конце. Данные с сервера клиент не воспринимает, даже если им в конец прописать этот символ или использовать любой из вариантов, предложенных выше. Просто больше не вижу вариантов. --------------------
Закон отладки: Каждая последняя ошибка является предпоследней. |
|||
|
||||
LSD |
|
||||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Попробуй так:
в переменную packet сформируй и запиши корректный пакет. Если и это не заработает, то проблема точно не в Java. Дело или в клиенте или в протоколе (возможно ты его не совсем правильно понял).
А клиент вообще проверенный, он хоть с одним сервером нормально работал? -------------------- 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. |
||||||||
|
|||||||||
absUnderline |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.3.2006 Репутация: нет Всего: нет |
У меня другой вопрос, есть сервер принимающий нескольких клиентов след конструкцией
// s - ServerSocket while ( isActive ){ handle(s.accept) } сам метод handle что-то вроде try{ while (isActive ) // какие-то действия с input, output stream }cacth(IOException ex){ // соответственно реакция } проблема в том, что при при возникновении ошибки (пример : жестокий выход из клиента ) ошибка возникает везде и соответственно все соединения со стороны сервера закрываются. в чем причина понять не могу, бьюсь уже 2ой день предложения по созданию правильного выхода не принимаются ( никто не может застраховать от форс мажора ) |
|||
|
||||
absUnderline |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.3.2006 Репутация: нет Всего: нет |
ой товарищи стыдно мне, все должно работать проблема в моих кривых руках сорри
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |