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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

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

Сообщение yser » 26.02.2010 10:51:31

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


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

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

Рекомендую когда установлено соединенение, переодически посылать мелкие пакеты чтоб соединение не падало т.к. в свое время столкнулся с такой проблемой, что при отсутствии передачи данных в течении какогото времени соединение разрывалось, а клиент и сервер этого не замечают. Как оказалось виноват был NAT-сервер который обеспечивал соединение через и-нет, он просто сбрасывал соединение при отсутствии передачи данных в течении какогото времени.
yser
новенький
 
Сообщения: 29
Зарегистрирован: 06.02.2008 11:27:40

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

Сообщение Timid » 09.03.2010 11:19:27

Рекомендую когда установлено соединенение, переодически посылать мелкие пакеты чтоб соединение не падало

Правильный подход. Шлите от клиента пакет с временем на клиенте. Например: "ping "+IntToStr(GetTickCount), раз в 5 секунд.
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

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

Сообщение Yurakl » 23.03.2010 08:53:45

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

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

Сообщение eevee » 23.03.2010 12:39:35

Это зависит от ядра линукса. Там стоит время жизни соединения, и делать с ним ничего в принципе не надо.

Если Вы разрабатываете клиент/серверное приложение, то делайте прием и передачу каких нибудь служебных пакетов через определенное время. Если за определенное время пакет не поступил - рвать связь и пытаться соединяться заново. Но это хорошо работает, если клиент и сервер созданы Вами либо Вы знаете, как общаются сторонние клиент либо сервер.
eevee
новенький
 
Сообщения: 63
Зарегистрирован: 29.12.2009 17:52:44
Откуда: Саратов

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

Сообщение Yurakl » 23.03.2010 12:53:14

Дело во том, что если посылать не 0, а к примеру 5 байтов,то при отсутствии соединения будет возвращаться -1, а не 0
Yurakl
новенький
 
Сообщения: 62
Зарегистрирован: 20.01.2010 08:59:53

Пред.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 22

Рейтинг@Mail.ru
cron