Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];




Вниз

Работа с компонентом TServerSocket 


Люк   (2001-12-18 11:51) [0]

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



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

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



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

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



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

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



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

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



Digitman   (2001-12-19 12:46) [5]

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



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

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

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




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.015 c
6-19286           NetBreaker666         2001-12-20 14:38  2002.03.07  
Как получать в CGI данные, переданные методом Post???


1-19122           Aleksandr             2002-02-20 19:13  2002.03.07  
Почему компоненты АДО не создаются с Owner=nil?!!!!!!


3-19092           Mishka                2002-02-08 21:33  2002.03.07  
Delphi+MS SQL


1-19169           x_andrey              2002-02-21 06:30  2002.03.07  
Excel & Delphi 5


1-19147           Igor_                 2002-02-21 10:36  2002.03.07  
Переключение между MDI- Child