Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

скачивание файлов TCP/IP

52K
18 ноября 2010 года
psyhitus
5 / / 12.11.2009
По учебе стоит задача реализовать ftp клиент на уровне TCP/IP, т.е. без использования сторонних библиотек. Программу написал на TCL, столкнулся с проблемой не могу скачивать большие файлы, при объеме в 5 - 10 кбайт все качается отлично. Как только пытаюсь загрузить 10 мбайт программа подвисает... и в результате сервер по таймауту отключает клиента.

Вопрос: как в теории должно быть устроено скачивание файлов?

P.S.: начал читать Снайдера - Эффективное программирование TCP/IP, но пока не нашел решения своей проблемы.
240
18 ноября 2010 года
aks
2.5K / / 14.07.2006
Цитата: psyhitus
По учебе стоит задача реализовать ftp клиент на уровне TCP/IP


Дык у TCP/IP самого уровня четыре. =)


Цитата: psyhitus
При объеме в 5 - 10 кбайт все качается отлично. Как только пытаюсь загрузить 10 мбайт программа подвисает... и в результате сервер по таймауту отключает клиента.


Ну поскольку телепатов тут нет - желательно или код выложить или подробно по шагам расписывать процесс отправки/скачивания данных в коде вашего ftp клиента. Иначе гадать смысла нет.

52K
18 ноября 2010 года
psyhitus
5 / / 12.11.2009
вечером выложу код, наконец нашлось время




proc SaveFile {} {
global DataSocket ControlSocket .c.text CurSelDir CurSelFile
set rfile $CurSelFile
if [string compare $rfile "0"]==0 {
tk_messageBox -message "You choose directory \n we can download only files"
return
} else {
set filename [tk_getSaveFile]
}
cmdPASV

puts $ControlSocket "RETR $rfile"
flush $ControlSocket
.c.text insert end "< RETR $rfile\n"
# получаем 150 Connection Accepted
gets $ControlSocket line
.c.text insert end "> $line\n"
# получаем 226 Transfer Ok
gets $ControlSocket line
puts $line

set file [open $filename wb]

fconfigure $DataSocket -translation auto -buffering buf -bufferSize 204800



while { ![eof $DataSocket] } {
gets $DataSocket dataline
puts $file $dataline
}

close $file
close $DataSocket
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог