Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по сетям.


Jo ©   (2002-07-11 12:39:00) 

TServerSocket, TClientSocket
На одной машине запушен сервер. На другой клиент. Принудительно разрываю связь. Как на клиенте отследить, что связь с сервером потеряна? Отправляю данные SendBuf, даже ошибку не выдает, что связь разорвана.


вумный   (2002-07-18 08:37:00) [1]

Я решил эту проблему так:
Посадил клиента на таймер(минута-вполне подходит) по отправке сообщений серверу
Перед отправкой нового сообщения проверяю вернулось ли прежнее
Если вернулось, то считаю сервер в работе.
Если нет, то извини.


Digitman   (2002-07-11 14:15:00) [2]

TCP гарантирует тебе, что в ответ на SYN-пакет передатчик получит от приемника как минимум :

ACK-пакет;
RST-пакет;

в данной ситуации передатчик ни черта не получит от приемника, поскольку физ.связь отсутствует, без нее логическая связь (на уровне собственно TCP-протокола) невозможна.

вместо этого локальная Winsock-подсистема в ответ на SYN-пакет передатчика должна вернуть ошибку таймаута, коей ты, видимо, не дожидаешься, потому как она не мнгновенно возвращается : значение тайм аута, скажем, может быть не менее минуты.


Jo   (2002-07-11 13:44:00) [3]

Тут проблема в том, что у отпраляются много пакетов(мною сформированные) и если все время ждать подтверждение получения пакета, то клиентская часть будет все время стопариться. Плюс к этому, неизвестно сколько времени уходит на обработку данных от других клиентов.

---
И еще, я не пойму одного, данные отправляются TCP/IP пакетами. Но TCP должен же гарантировать что IP-дейтаграмма принята, или это не так?


Jo   (2002-07-11 13:04:00) [4]

ммда, геморойчик
All thx. To Fiend, если не сложно подкинь примеры, может что интересное найду.
wbr


Digitman   (2002-07-11 12:55:00) [5]

Организуй квитирование сообщений.

В ответ на запрос передающей стороны принимающая сторона должна ответить сообщением, подтверждающим прием запроса. Если, например, на 5-кратное повторение запроса (с опредеделенной задержкой между посылками очередных) передающей стороной в заданный период времени от принимающей стороны не получена "квитанция", подтверждающая прием, запрашивающая сторона должна разорвать логическое соединение по своей инициативе как недостоверное.
Это - концептуально. Как это реализовать - думай, вариантов - море. Но без событий и таймеров не обойтись.


Fiend   (2002-07-11 12:44:00) [6]

То Jo
Я именно с эти компонентами не работал. Не знаю как они живут.
Но вот у меня есть приложение с поименованными каналами, в принципе подобная фишка. Может тебе их лучше использовать?

Достаточно просто. И работает абсолютно одинаково, независимо от того работаешь через сеть или обращаешся локально на машине.

Есть всякие функции, которые возвращают состояние коннекта. Да и когда передаёшь данные, сразу узнаешь, передались они или нет.

Могу нарезать примеров


Наверх

Титульная страница Поиск, карта сайта Написать письмо