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

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

Работа с компонентом TServerSocket [D5, NT4]


Люк ©   (2001-12-18 11:51:00) 

Уважаемые коллеги, помогите решить проблему. В своем серверном приложении я использую компонент TServerSocket. В программе я рассылкаю клиентам пакеты, которые идут с частотой порядка три пакета в секунду. Требуется гарантированно доставлять всю последовательность пакетов клиентам. Проблема состоит в том, что периодически SocketSocket для одного из Connections выдает сообщение eeDisconnect, чего по идее не может быть по определению. Кто нибудь подскажет, как организовать гарантированную доставку всей последовательности пакетов данных клиентам?


Wonder   (2001-12-19 13:16:00) [1]

Попробую дополнить Digitman-а.

IP - сетевой протокол, обеспечивающийдоставку инкапуслированного в него TCP-пакета до адресата.
TCP - транспортный протокол, гарантирующийдоставку до адресата данных, причем именно в том порядке, в котором их отправляют.
WinSock обеспечивает выход как раз на транспортный уровень стека. Поэтому, если не учитывать ошибки связи, то что ты пошлешь, то и получишь.
Тебе не надо задумываться о целостности данных, полученных от транспортного уровня. Надо задумываться только о том, а все ли данные которые ты хотел получить ты получил в действительности? А вот для этого надо будет разработать промежуточное звено (протокол) между уровнем приложения и транспортным уровнем.
Аналогия - Протокол FTP и ftp-клиент с возможностью "докачки". Целостность принятых данных проверяется размером принятого файла и только. Если произошла ошибка связи и размер принятого файла не равен размеру файла на сервере, то его можно "докачать" с места ошибки.


Digitman   (2001-12-19 12:46:00) [2]

интернет-протокол базируется на протоколе TCP. поэтому он и имеет более полное название - TCP/IP. а гарантированность доставки пакета - это нечто иное, чем то, что ты подразумеваешь под ней


Люк   (2001-12-19 10:30:00) [3]

Посмотрел я исходный код компонента и был несколько удивлен, когда заметил, что сокет то инициируется с протоколом IP а не TCP. Так о какой гарантированной доставке сообщений может идти речь?


Digitman   (2001-12-18 13:20:00) [4]

Об этом должен заботиться не сервер, а клиент !
Клиент всегда в состоянии определить, какую часть данных он уже получил при выполнении запроса к серверу (когда внезапно произошел дисконнект), а какую еще не успел. В зависимости от протокола инф.обмена между клиентом и сервером могут быть разные варианты : от повторения того же запроса до посылки некоторого спец.запроса с требованием передать данные с указанной точки ожидания.


Люк   (2001-12-18 12:18:00) [5]

Даже если это так, то как мне возобновить передачу последовательности пакетов, чтобы не было ни дублирования, ни потери. Ведя я не знаю на каком именно пакете произошла ошибка.


Digitman   (2001-12-18 12:00:00) [6]

TServerSocket использует протокол TCP в режиме SOCK_STREAM, этот режим изначально подразумевает гарант.доставку пакетов. Так что дисконнект у тебя происходит по иной причине. Возможно, по инициативе клиента. А такая инициатива у последнего может возникнуть и в случае каких-то ошибок на его стороне при чтении/записи из/в TClientSocket


Наверх

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