Добрый день!
Разрабатываю приложение использующее сокеты для передачи данных между сервером и клиентом.
Сервер на java
Клиент на Flash ActionScript 3
Для трансляции данных со стороны клиента использую класс Socket (ActionScript)
на стороне сервера ServerSocket (java)
протокол организован следующим образом сообщение состоит из набора байтов
где первые два байта содержат размер тела сообщения в байтах
ну и следовательно само тело сообщения размером указанным в первых двух байтах.
так вот вроде все гладко по идее но с сокетами никогда ранее не работал, потому возникают следующие вопросы по самой работе сокетов во flash и java:
Как приходят данные с сервера по сокетам во flash?
например при плохой связи клиента возможен ли приход не всех данных, т.е. к примеру сервер отправил сообщение длиной 12 байт(2байта размера+10байт тело сообщения) а на стороне клиента произошло следующее пришло только три байта из 12 обьект класса Socket(ActionScript) сгенерировал сообщение socketData Возможно такое? или же он генерирует сообщение когда приходят все 12 байт?
Тоже самое и с java нужно ли проверять количество принятых байтов от клиента или тоже класс сам распознает когда данные пришли полность
в сети полно примеров клиентов и серверов на сокетах но нигде не видел проверки на приход всех данных...
ктонибудь сталкивался с передачей бинарных данных через сокеты?
заранее спасибо за ответы!
google://UDP
google://TCP
Socket в ActionScript это TCP сокет, работает как поток.
Пакет вполне может прийти не полностью - как на стороне сервера, так и на стороне клиента необходимо это учитывать.
спасибо!
блин а как вообще отследить какие данные утеряны?
допустим если у меня сообщение как писал выше первые два байта размер последующего тело сообщения с данными,
так вот если первые два или один байт к примеру не пришел... то в буфере данные с отсутствующим отрезком данных.
или строго посылать данные определенного размера напр 1024байт при этом выделять сначала и с конца определенной группой данных...
вообще голова уже кипит... главное в инете что то во всех примерах никто никаких проверок не делает, потому и найти более менее нормального примера пока не удалось...(((
Gaco
bleed77
TCP как бэ гарантирует доставку байтов. Если ты посылаешь "АБЪЦ", то на другом конце ты получишь "АБЪЦ" или "АБЪ" или "АБ" или "А" или ничего, если связь совсем плохая. Поэтому принимай свою длину и мотай сколько надо байтов. Если принялось - значит принялось.
bleed77
Они не утеряны, socketData вполне может возникнуть когда пакет ещё не пришёл полностью. Пиши в начало пакета его размер и код и накапливай даные пока не прийдёт пакет полностью.
Тема в архиве.