Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.58.39.23] |
|
Сообщ.
#1
,
|
|
|
К сожалению ничего не нашел ни на этом форуме, ни в инете вообще по этому поводу - везде в описании протокола написано, что команда ABOR прекращает передачу файла. На деле все выглядит совершенно иначе - посылаю команду RETR, получаю ответ 1xx от сервера и начинаю принимать файл... при нажатии на кнопку STOP посылаю команду ABOR, на которую сервер категорически отказывается реагировать и продолжает пересылку файла! никак не пойму в чем дело! да и вообще после команды RETR сервер ни на что не хочет реагировать, пока не передаст файл... это я делаю что-то не так, или сервер глючный? скорей всего первое...
|
Сообщ.
#2
,
|
|
|
Ну почему же в rfc есть. ABOR кстати нужно посылать с символами терминала(telnet), кроме того эту команду желательно посылать как сверхсрочную(MSG_OOB). Однако далеко не все серверы это нормально воспринимают и практика показала, что лучше просто делать shutdown, а потом closesocket сокету соединения данных. В своём клиенте( Ftp_man ) я шлю ABOR, только когда качаю в главном потоке.
|
Сообщ.
#3
,
|
|
|
Jenya, в разделе "Наши исходники" я нашел только несколько функций вашего клиента - посылка команды, проверка на готовность и тд... самой посылки ABOR не видел. Можно вот поподробней либо про первый способ с командами telnet, либо про второй с shutdown?
|
Сообщ.
#4
,
|
|
|
Самый простой способ :
shutdown(hDataSock,SD_BOTH); closesocket(hDataSock); Только после прерывания, как и после приёма файла нужно прочитать из соединения комманд ответ сервера. |
Сообщ.
#5
,
|
|
|
супер! все работает! спасибо! Вот только я не пойму, почему бы не делать серверы без этих заморочек, почему бы серверу не только просто передавать файл, а еще бы одновременно слушать управляющее соединение на наличие команд
|
Сообщ.
#6
,
|
|
|
А как насчет команды ABOR при передачи от клиента на сервер командой STOR?
Насколько я поняла, команда ABOR, это всегда ненормальное прерывание. Цитата Сервер всегда осуществляет активное открытие соединения данных. Обычно сервер также осуществляет активное закрытие соединения данных, за исключением тех случаев, когда клиент отправляет файл на сервер в потоковом режиме, который требует, чтобы клиент закрыл соединение (что делается с помощью уведомления сервера о конце файла). Но как тогда выглядит уведомление о конце файла? можно ли просто закрыть соединение и сокет (shutdown() + closesocket())? |
Сообщ.
#7
,
|
|
|
При STOR лучше просто соединение закрыть.
|