.NET的FTP客户端类

时间:2008-09-16 15:25:46

标签: .net proxy ftp gateway

任何人都知道一个好的,希望免费的FTP类可以在.NET中使用,它实际上可以在HTTP代理或FTP网关后面工作吗? .NET中的FtpWebRequest内容充其量是可怕的,我真的不想在这里推出自己的东西。

10 个答案:

答案 0 :(得分:2)

我们的Rebex FTP可以正常使用代理。以下代码显示了如何使用HTTP代理连接到FTP(代码取自FTP tutorial page)。

// initialize FTP client 
Ftp client = new Ftp();

// setup proxy details  
client.Proxy.ProxyType = FtpProxyType.HttpConnect;
client.Proxy.Host = proxyHostname;
client.Proxy.Port = proxyPort;

// add proxy username and password when needed 
client.Proxy.UserName = proxyUsername;
client.Proxy.Password = proxyPassword;

// connect, login 
client.Connect(hostname, port);
client.Login(username, password);

// do some work 
// ... 

// disconnect 
client.Disconnect();

您可以在www.rebex.net/ftp.net/download.aspx

下载试用版

答案 1 :(得分:1)

我没有特别的经验但sharptoolbox提供plenty implementations

答案 2 :(得分:1)

您可以尝试"Indy.Sockets"。它可以处理许多高级网络协议,包括ftp。

答案 3 :(得分:1)

我遇到的最好的一个是edtFTP.net http://www.enterprisedt.com/products/edtftpnet/overview.html

如果提供灵活性,则不会进入内置类

答案 4 :(得分:0)

我现在已经使用了http://sourceforge.net/projects/dotnetftpclient/很长一段时间了,它完成了很好的工作。如果您使用PASV连接,则不应出现任何防火墙问题。不确定FTP网关是什么,但我看不到HTTP代理会如何影响任何FTP连接。

答案 5 :(得分:0)

我最近在我的项目中使用了它,效果很好。

http://www.codeproject.com/KB/IP/ftplib.aspxt

答案 6 :(得分:0)

.Net 4.0+现在包含一个ftp客户端类 - 有关详细信息,请参阅此msdn链接。

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx

我看到即使使用PASV模式等的选项,所以它看起来完全正常(或者我希望如此)。

答案 7 :(得分:0)

我遇到了simalor问题,通过Socks4代理为FTPS(显式)通信创建了一个客户端。

经过一些搜索和测试后,我发现了.NET库Starksoftftps。 http://starksoftftps.codeplex.com/

这是我的代码示例:

Socks4ProxyClient socks = new Socks4ProxyClient("socksproxyhost",1010);
FtpClient ftp = new FtpClient("ftpshost",2010,FtpSecurityProtocol.Tls1Explicit);
ftp.Proxy = socks;
ftp.Open("userid", "******");
ftp.PutFile(@"C:\519ec30a-ae15-4bd5-8bcd-94ef3ca49165.xml");
Console.WriteLine(ftp.GetDirListAsText());
ftp.Close();

答案 8 :(得分:0)

这是我的开源C#代码,它通过HTTP代理将文件上传到FTP。

public bool UploadFile(string localFilePath, string remoteDirectory)
{
    var fileName = Path.GetFileName(localFilePath);
    string content;
    using (var reader = new StreamReader(localFilePath))
        content = reader.ReadToEnd();

    var proxyAuthB64Str = Convert.ToBase64String(Encoding.ASCII.GetBytes(_proxyUserName + ":" + _proxyPassword));
    var sendStr = "PUT ftp://" + _ftpLogin + ":" + _ftpPassword
        + "@" + _ftpHost + remoteDirectory + fileName + " HTTP/1.1\n"
        + "Host: " + _ftpHost + "\n"
        + "User-Agent: Mozilla/4.0 (compatible; Eradicator; dotNetClient)\n" + "Proxy-Authorization: Basic " + proxyAuthB64Str + "\n"
        + "Content-Type: application/octet-stream\n"
        + "Content-Length: " + content.Length + "\n"
        + "Connection: close\n\n" + content;

    var sendBytes = Encoding.ASCII.GetBytes(sendStr);

    using (var proxySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
    {
        proxySocket.Connect(_proxyHost, _proxyPort);
        if (!proxySocket.Connected)
            throw new SocketException();
        proxySocket.Send(sendBytes);

        const int recvSize = 65536;
        var recvBytes = new byte[recvSize];
        proxySocket.Receive(recvBytes, recvSize, SocketFlags.Partial);

        var responseFirstLine = new string(Encoding.ASCII.GetChars(recvBytes)).Split("\n".ToCharArray()).Take(1).ElementAt(0);
        var httpResponseCode = Regex.Replace(responseFirstLine, @"HTTP/1\.\d (\d+) (\w+)", "$1");
        var httpResponseDescription = Regex.Replace(responseFirstLine, @"HTTP/1\.\d (\d+) (\w+)", "$2");
        return httpResponseCode.StartsWith("2");
    }
    return false;
}

答案 9 :(得分:-2)

System.Net.WebClient可以处理ftp网址,使用起来更容易一些。您也可以使用它设置凭据和代理信息。