Страница 2 из 2

Re: Создание tcp сервера

Добавлено: 26.02.2010 10:10:48
yser
Yurakl писал(а):Вот tcp сервер
....
подскажите, пожалуйста, как сервер может получить подтверждение о том,что отправленные байты дошли до получателя, т.е. связь по ethernet есть


вообщем если связь есть - то данные точно дошли т.к. протокол TCP вроде как гарантирует "TCP — это транспортный механизм, предоставляющий поток данных, с предварительной установкой соединения, за счёт этого дающий уверенность в достоверности получаемых данных, в отличие от UDP, гарантирует, что приложение получит данные точно в такой же последовательности, в какой они были отправлены, и без потерь."

Добавлено спустя 19 минут 17 секунд:
Yurakl писал(а):Кстати команда send возвращает количество переданных символов!и если клиент отрублен, то соответственно она возвратит -1.

Рекомендую когда установлено соединенение, переодически посылать мелкие пакеты чтоб соединение не падало т.к. в свое время столкнулся с такой проблемой, что при отсутствии передачи данных в течении какогото времени соединение разрывалось, а клиент и сервер этого не замечают. Как оказалось виноват был NAT-сервер который обеспечивал соединение через и-нет, он просто сбрасывал соединение при отсутствии передачи данных в течении какогото времени.

Re: Создание tcp сервера

Добавлено: 09.03.2010 10:19:27
Timid
Рекомендую когда установлено соединенение, переодически посылать мелкие пакеты чтоб соединение не падало

Правильный подход. Шлите от клиента пакет с временем на клиенте. Например: "ping "+IntToStr(GetTickCount), раз в 5 секунд.

Re: Создание tcp сервера

Добавлено: 23.03.2010 07:53:45
Yurakl
я для проверки соединения отсылаю нулевой байт
i:=send(p,buf[0],0,MSG_NOSIGNAL);
При начальном включении, когда связи нет i=-1, при ее появлении I=0, а вот разрыве связи i также остается равным 0. Почему так?

Re: Создание tcp сервера

Добавлено: 23.03.2010 11:39:35
eevee
Это зависит от ядра линукса. Там стоит время жизни соединения, и делать с ним ничего в принципе не надо.

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

Re: Создание tcp сервера

Добавлено: 23.03.2010 11:53:14
Yurakl
Дело во том, что если посылать не 0, а к примеру 5 байтов,то при отсутствии соединения будет возвращаться -1, а не 0