![]() |
Как дождаться завершения функции
День добрый столкнулся с такой проблемой... у меня есть сокет сервер на си и клиент на флеше соответсвенно..
когда flash'ка коннектиться к серверу она должна послать три команды: Код AS1/AS2:
Код:
HELLO_SERVERКод:
HELLO_SERVERЗаранее спасибо! |
1. Не понятно зачем таким странным способом посылать UTF-8 строки.
2. TCP все равно будет отправлятся пакетами, максимум - сколько влезло, столько влезло, что вы можете сделать, это дождаться сообщения об обработке предыдущей команды и потом послать следующую. Но это будет не рционально по времени и затраченым усилиям, лучше записывайте команды так, чтобы они либо были фиксированого размера, либо была однозначная логика в их размере, либо просто определенный символ-разделитель между ними. |
Какого бы размера ни было одно сообщение, склеиваться на клиенте они точно не могут - мне данный баг не повторить никак. И, да, еть такой метод:
Код AS3:
|
ты такой баг не повторишь на локалхосте. А на сервере с медленным пингом - легко.
|
Вот как раз наоборот.
Чем больше пинг, тем больше время между двумя пакетами (меньше вероятность склейки(хотя - откуда ей тут быть?)). В любом случае, flush() вызывается каждый раз, значит от флеша данные уходят вполне дискретными кусочками. Так что, на мой взгляд, беда в серверной части |
Да нет, дело не в этом, флеш же не сам обеспечивает реализацию TCP, flush() просто значит очистить данные которые были сейчас записаны в сокет и послать их, а уже как они пошлются - это решает програма, которая непосредственно TCP реализует. Захочет - подождет пока максимальный размер пакета наберется, не захочет - опправит так. Т.е. предположим, что размер пакета 100 байт, в первый раз флеш записал 70 байт + flush() програма обеспечивающая соединение увидела, что данных не достаточно, и стала в режим ожидания - если в течение секунды не прийдет еще 30+ байт, пошлет, как есть, а если прийдет, то добавит эти 30 байт, и если остаток не дотягивает до 100, снова встанет на таймер. Ну, это так, очень умозрительно, но фишка в том, что TCP обязан отправлять данные по одному пакету и всегда ждать подтверждения о получении, поэтому он не может просто по желанию взять и послать произвольное количество информации.
|
Tcp/ip вообще не отсылает следующий пакет, пока не прийдет сообщение о доставке предыдущего (если не отключен принудительно алгоритм Нейгла).
|
что делать то :D
|
wvxvw тебе вторым постом всё уже написал
|
Цитата:
Цитата:
Цитата:
|
| Часовой пояс GMT +4, время: 08:04. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.