![]() |
Socket, алгоритм склеивания данных
Доброго времени суток!
Подскажите, пожалуйста, какой-нибудь грамотный алгоритм склеивания данных в сокете и как проверить при считывании данных из сокета их целостность (кусок это или полный пакет) |
берешь байтовый массив рубаешь его на пакеты по сколько тебе нужно , в каждый пакет заносишь номер пакета и количество байт которые будут в этом пакете - и начинаешь отгружать.
|
А есть хоть какой-нить наглядный примерчик? Так проще разобраться.
|
в первом пакете на сервере запихиваешь байт или инт (смотря, что нужно), который будет показывать длину всего сообщения. И исходя из этого считаешь, полное сообщение пришло или нет
|
Цитата:
По поводу примерчика - неужели так сложно сделать writeShort(длина массива данных) перед записью самих данных? |
[quote=gloomyBrain;969510]А номер-то зачем? =)
вдруг какого то пакета нет после передачи , можно повторно запросить и указать какой пакет нужен |
Спасибо, принцип понял. А пример нужен для большей ясности...
|
Цитата:
Добавлено через 4 минуты не изобретай велосипед , TCP/IP гарантирует передачу и целостность данных , он сам продублирует не хватающие пакеты |
Цитата:
Цитата:
Однако, я могу захотеть отправить больше, чем влезает в пакет TCP, тогда мне становится нужно дописывать длину пакета в его начале |
Цитата:
|
А это зависит от MTU
от 576 до 1500 байт |
Код AS3:
|
В данном аспекте все зависит от сервера. По идее - да. На практике - не всегда
|
главное что б когда в Socket.writeBytes(); передаются байты , не было там нулевого байта , тогда они придут все за раз придут
|
|
Вписываем длину пакета. Если пришло меньше, ждем ещё кусок. Всё.
|
Цитата:
Код AS3:
|
| Часовой пояс GMT +4, время: 00:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.