| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > CSocket |
| Автор: Step 28.5.2004, 11:26 |
| Потоковое соединение... Как определить что данные уже посланны и поток можно закрывать |
| Автор: Baa 28.5.2004, 11:55 |
| Чего-то я не пойму... Что значит потоковое соединение? Данные синхронно отправляются просто в другом потоке? Вопрос-то в чем, в синхронизации? |
| Автор: Step 28.5.2004, 12:34 |
| Потоковое -ТСП а не ЮДП есть буфер длина 10000 сенд отправляет 5000 тутже вызываю сенд еще на 5000 поток не закрываю клиенту приходит все если после второго сенда я сразу вызываю СSocket::Close(); то клиенту приходит только 5000 тысяч + к этому ошибка это происходит по след. причине пока первый сенд отправляет первую порцию я успеваю закрыть сокет... и в результате ошибка... по той простой причине что происходит попытка отправить вторую порцию с объекта не являющегося сокетом..... (сокета уже не существует, он закрыт).... я привел упращенную схему. прошу не советовать мне поставить задержку..... так как количество порций в полной задаче изначально не известно..... как и количество данных... Полная задача выгляди так: 1. генерируються данные, длина неизвестна 2. данные должны передаться на клиент 3. если генератор выставил флаг что генерация законченна то надо убедиться что клиенту отправленны все данные и закрыть сокет немедленно.... Кстати у этой задачи есть и обратная проблема когда клиент принимает данные порциями то соединение со стороны сервера закрываеться гораздо раньше чем клиент успевает принять все данные.... но эта проблемма легко решаеться путем использования флага "Сервер закрыл соединения" и Флага "данных не найденно" |
| Автор: Step 29.5.2004, 17:31 |
| Поднимаю |