Здравствуйте, vers, Вы писали:
V>>>Да, действительно. А если данных 100 мегабайт? Пока получатель пришлет подтверждение, у клиента таймаут наступит.
ST>> Таймаут наступит только в том случае если произойдет обрыв сетевого соединения (умер получатель, или вынули сетевой кабель), тогда сам стек протоколов TCP/IP попробует несколько раз повторить передачу потерянного пакета и не получив подтверждения от принимающей стороны выдаст ошибку. А пока данные успешно передаются таймаут не сработает, если конечно вы не установите значение Socket.SendTimeout в ненулевое значение
.
ST>> Идея разбить сообщение на маленькие блоки, с подтверждением после каждой переданной порции, не лишена смысла, тогда не придется ожидать пока освободится буфер стека TCP. Размер порции можно сделать 1 килобайт, тогда она точно поместится в один TCP пакет.
V>Тогда такой чисто теоретический вопрос: предположим, что я программирую FTP-клиент, в таком случае как мне отображать прогресс передачи данных? Даже, если это будет асинхронная передача, нигде не указывается, сколько байт в текущий момент уже передано. Либо "передача идет", либо "уже передано".
отправляй данные маленькими порциями, с таким расчетом чтобы они влазили в буфер (размер буфера зависит от сетевых настроек ОС, обычно около 4 КБ)
... << RSDN@Home 1.2.0 alpha rev. 676>>