Форум: "Сети";
Текущий архив: 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-клиент с возможностью "докачки". Целостность принятых данных проверяется размером принятого файла и только. Если произошла ошибка связи и размер принятого файла не равен размеру файла на сервере, то его можно "докачать" с места ошибки.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c