Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   локальный сокет-сервер на флэше - как сэмулировать пакеты? (http://www.flasher.ru/forum/showthread.php?t=174389)

Волгоградец 24.01.2012 13:05

локальный сокет-сервер на флэше - как сэмулировать пакеты?
 
Привет. Пробую написать сокет сервер на эйре и в этом дел я нуб - нужна помощь. Я немного почитал про протоколы, сокеты и насколько я понимаю, когда я на одном конце делаю socket.flush(), то на другом конце не факт что я получу то же количество байт в пришедшем пакете. Но оставшееся по-любому придет рано или поздно, верно? И вот я хочу сэмулировать такую работу - но какую бы длину не запихнул - у меня приходит ровно столько же, сколько уходит. Пробовал до 50 Мб за раз - неужели еще больше надо?

Genzo 24.01.2012 13:11

Приведу простую аналогию :
Аналоговая кассета, вы слушаете с нее песни но не знаете когда одна заканчивается и начинается другая песня, вы записываете после каждой песни слово "следующая" и понимаете что когда вы услышали следующая, значит все что вы до этого слушали было песней. Так же и с пакетами, сервер без конца может слать данные, и нужно их как-то разделять, обычно это делается : "\0". В текстовом формате это выглядело бы так : "data1\0data2\data2continue\0data3"

Добавлено через 1 минуту
Еще принято в заголовке пакета указывать его длину, чтобы можно было точно понять что пришел целый пакет, совместите проверку длинны и разделение пакетов и будет счастье.

Волгоградец 24.01.2012 13:30

Ммм, наверное непонятно объяснил. С разделением проблем нет. Наоборот - я всегда получаю ровно столько сколько отправил. Интересует как на локальном сервере добиться того, чтобы сокет дробил входящие пакеты. Можно конечно вручную разбивать байт аррэй и отсылать в два захода - но хочется протестировать механизм приема/отдачи сообщений так, как это будет в боевом проекте.

Genzo 24.01.2012 13:53

напишите на сервере задержку, что-то типа
Код AS3:

buf.writeByte(1);
setTimeout(1000,continueWriting);
private function continueWriting(){
buf.writeByte(2);
buf.flush();
}



Часовой пояс GMT +4, время: 07:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.