Программирование ftp: как прервать передачу файлов? - PullRequest
5 голосов
/ 23 июня 2011

Я делаю небольшой FTP-клиент для получения больших файлов из FTP.Я прочитал в RFC, что команда ABOR очень проблематична для серверов.Почти все серверы, которые я вижу, просто продолжают отправлять данные даже после отправки ABOR через управляющее соединение.Закрытие передачи данных может также привести (в 70% тестов) к закрытию управляющего соединения.Сервер просто отправляет пакет FIN после моего отправленного пакета ABOR.Каков наилучший способ прекратить получение какого-либо байта и не потерять управляющее соединение?FlashFXP делает это нормально на всех типах задержек соединений и серверов.Исследуя TCP-трафик, я обнаружил стандартный FTP-поток RFC.

Но в моем случае все еще не удалось прервать передачу с помощью этой техники:

1) shutdown (passive_socket, SD_BOTH)

2) closesocket (passive_socket);

3) send (control_socket, "ABOR \ r \ n")

4) recv (control_socket) - здесь остановились

Спасибо

Ответы [ 2 ]

6 голосов
/ 16 июля 2011

Команда «ABOR \ r \ n» должна быть отправлена ​​как внеполосные данные. В случае отправки () -

send(control_socket, "ABOR\r\n", 6, MSG_OOB);

Через некоторое время после того, как вы recv () код 426 Передача прервана. Передача данных закрыта.

Следующая ссылка более полезна, если вы не можете добиться успеха при переводе абортов: http://www.developer.nokia.com/Community/Discussion/showthread.php?134079-Telnet-quot-Interrupt-Process-quot-(IP)-signal-amp-Telnet-quot-Synch-quot

0 голосов
/ 23 июня 2011

Вы не должны терять свое управляющее соединение при закрытии соединения для передачи данных, это две отдельные розетки.Возможно, проверьте ваш код, чтобы узнать, почему закрывается управляющее соединение.

...