Re[5]: Отправка данных через сокет в блокирующем режиме
От: _Morpheus_  
Дата: 08.05.07 16:15
Оценка:
Здравствуйте, vers, Вы писали:

V>>>Да, действительно. А если данных 100 мегабайт? Пока получатель пришлет подтверждение, у клиента таймаут наступит.


ST>> Таймаут наступит только в том случае если произойдет обрыв сетевого соединения (умер получатель, или вынули сетевой кабель), тогда сам стек протоколов TCP/IP попробует несколько раз повторить передачу потерянного пакета и не получив подтверждения от принимающей стороны выдаст ошибку. А пока данные успешно передаются таймаут не сработает, если конечно вы не установите значение Socket.SendTimeout в ненулевое значение .


ST>> Идея разбить сообщение на маленькие блоки, с подтверждением после каждой переданной порции, не лишена смысла, тогда не придется ожидать пока освободится буфер стека TCP. Размер порции можно сделать 1 килобайт, тогда она точно поместится в один TCP пакет.


V>Тогда такой чисто теоретический вопрос: предположим, что я программирую FTP-клиент, в таком случае как мне отображать прогресс передачи данных? Даже, если это будет асинхронная передача, нигде не указывается, сколько байт в текущий момент уже передано. Либо "передача идет", либо "уже передано".



отправляй данные маленькими порциями, с таким расчетом чтобы они влазили в буфер (размер буфера зависит от сетевых настроек ОС, обычно около 4 КБ)
... << RSDN@Home 1.2.0 alpha rev. 676>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.