Эмуляция активного FTP-соединения с использованием BSD Sockets - PullRequest
0 голосов
/ 05 марта 2012

Я новичок в программировании сокетов и пытаюсь реализовать упрощенную FTP-подобную программу.Он использует два TCP-соединения, одно в качестве управляющего соединения, а другое в качестве соединения для передачи данных.Проблема в том, что я не знаю, как использовать сервер для подключения к порту N + 1 клиента, используя его порт 20. Пожалуйста, обратитесь здесь , чтобы получить больше средств.

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

Чтобы создать подключение для передачи данных в активном режиме, вы:

  • Найти локальный адрес управляющего соединения с помощью getsockname();
  • изменить этот адрес, изменив номер порта на 20;
  • создать еще один сокет с socket();
  • привязать новый сокет к адресу порта 20, созданному с помощью bind();
  • подключите сокет к адресу / порту клиента с помощью connect().

Обратите внимание, что bind(), скорее всего, потерпит неудачу, если ваш демон не работает от имени пользователя root, поскольку привязка низкого номера порта является привилегированной операцией.

0 голосов
/ 05 марта 2012

Вам, вероятно, следует пройти через FTP RFC 959 , чтобы получить все подробности.Клиенту необходимо предоставить порт данных на сервер, если он хочет, чтобы сервер инициировал подключение к данным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...