ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FTP tcpclient 上传文件

2022-06-16 18:35:52  阅读:152  来源: 互联网

标签:FTP cmd stream tcpclient text await res var 上传



var host="localhost";
var port = 21;
var u="username";
var p="password";
var remoteDir = "filesync";
var fp="C:\\Users\\admin\\Desktop\\新建文本文档.txt";


await Upload();


async Task Upload()
{
    var res = "";
    remoteDir = remoteDir.Trim('/');
    var filename = Path.GetFileName(fp);

    TcpClient tcp = new TcpClient();
    tcp.Connect(host, port);
    NetworkStream stream = tcp.GetStream();
    if (tcp.Connected.ToString() != "True")
    {
        Console.WriteLine("Connect Failed!");
        Console.ReadLine();
        return;
    }

    await ReadTcp(stream);
    await cmd(stream, "USER " + u);
    await cmd(stream, "PASS " + p);
    await cmd(stream, "FEAT");
    await cmd(stream, "TYPE I");

    res = await cmd(stream, "CWD /" + remoteDir);
    if (res.StartsWith("550 ")) await cmd(stream, "MKD /" + remoteDir);
    await cmd(stream, "CWD /" + remoteDir);

    res = await cmd(stream, "PASV");
    var commands = res.Split(',');
    if (commands.Length > 4)
    {
        int port2 = int.Parse(commands[4]) * 256 + int.Parse(commands[5].Trim('\r', '\n', ')', '('));
        TcpClient tcpup = new TcpClient();
        tcpup.Connect(host, port2);
        var req = tcpup.GetStream();
        res = await cmd(stream, "STOR " + filename);
        if (!res.StartsWith("150 "))
        {
            throw new Exception("Upload PASV port Error!");
        }
        FileStream fs = new FileStream(fp, FileMode.Open, FileAccess.Read);
        fs.CopyTo(req);
        req.Flush();
        fs.Close();
        tcpup.Dispose();
    }

    await ReadTcp(stream);
    stream.Close();
    tcp.Close();
}

async Task<string> cmd(NetworkStream stream, string text)
{
    WriteTcp(stream,text);
    return await ReadTcp(stream);
}

void WriteTcp(NetworkStream stream, string text)
{
    if (!text.EndsWith("\r\n")) text += "\r\n";
    stream.Write(Encoding.UTF8.GetBytes(text));
}

async Task<string> ReadTcp(NetworkStream stream, bool print=true)
{
    MemoryStream ms = new MemoryStream();
    do
    {
        await Task.Delay(100);
        var bytes=new byte[4096];
        var len= stream.Read(bytes, 0, bytes.Length);
        ms.Write(bytes, 0, len);
    } while (stream.DataAvailable);
    var text= Encoding.UTF8.GetString(ms.ToArray());
    if(print) Console.WriteLine(text);
    return text;
}

标签:FTP,cmd,stream,tcpclient,text,await,res,var,上传
来源: https://www.cnblogs.com/yzpopulation/p/16382987.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有