Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.005 c
3-19072
Ura
2002-02-01 15:55
2002.03.07
IB и скорость


3-19049
yaJohn
2002-02-07 17:05
2002.03.07
DBGrid


7-19363
Drv
2001-11-30 12:02
2002.03.07
Невидимость


1-19198
cher_gvf
2002-02-18 18:13
2002.03.07
Можно ли..?


14-19298
EugeneT
2002-01-17 13:50
2002.03.07
Разработка кросс-платформенных приложений (D6)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский