FTPListener в .NET - PullRequest
       24

FTPListener в .NET

3 голосов
/ 22 января 2010

Я тестирую немного кода, который может извлекать файлы либо из локальной файловой системы, либо из http или ftp.Чтобы протестировать его, я создал простой метод, который использует класс HTTPListener из BCL для запуска одноразового веб-сервера в другом потоке, он просто обслуживает байтовый массив, который я отправляю, а затем выключается.(См. Код для этого ниже).

Мне просто интересно, есть ли какой-нибудь простой способ сделать то же самое для ftp?В .NET нет такой вещи, как класс FTPListener (насколько я знаю).Я не очень разбираюсь в FTP, но, насколько я знаю, есть канал управления и канал данных, поэтому я могу представить, что это будет немного сложнее, чем пример http ниже.Так что, есть идеи, если не писать с нуля с помощью сокетов?Любые классы, которые я мог бы использовать?

public static void Serve(int port, int statusCode, byte[] responseBody, 
                         Dictionary<string,string> headers)
{
    new Thread(delegate()
    {
        var listener = new HttpListener();
        listener.Prefixes.Add(string.Format("http://localhost:{0}/", port));
        listener.Start();
        var context = listener.GetContext();
        context.Response.StatusCode = statusCode;
        context.Response.ContentLength64 = responseBody.Length;
        if (headers != null)
        {
            foreach (string header in headers.Keys)
            {
                context.Response.AddHeader(header, headers[header]);
            }
        }
        context.Response.OutputStream.Write(responseBody, 0, responseBody.Length);
        context.Response.OutputStream.Close();
        listener.Stop();

    }).Start();
}

Ответы [ 2 ]

1 голос
/ 22 января 2010

FTP немного сложнее, чем HTTP, но не намного. Управляющий порт используется для отправки команд, таких как аутентификация, изменение каталога, запрос файлов, запрос отправки файлов и т. Д. Когда выполняется запрос, требующий данных, используется второе соединение для отправки фактических данных. В зависимости от того, используете ли вы активный или пассивный FTP, либо сервер подключится к клиенту, либо клиент снова подключится к серверу.

У нас есть собственная реализация клиента FTP, которую мы написали в .NET, которая полностью реализует клиента (с тех пор, когда в .NET была встроена поддержка FTP). Это всего несколько сотен строк кода.

Если вы можете найти существующий класс, который кто-то другой написал и протестировал, тогда, конечно, это лучше. Но если вам нужно сделать это самостоятельно, это выполнимо. Просто следуйте спецификации и протестируйте ее.

http://www.ietf.org/rfc/rfc959.txt

http://www.ietf.org/rfc/rfc1579.txt

0 голосов
/ 22 января 2010

Быстрый поиск обнаружил это: http://www.codeguru.com/csharp/csharp/cs_network/sockets/article.php/c7409/

Если бы он не был "слушателем", это послужило бы хорошим началом для него.

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