app.config内容如下<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="Host" value="192.168.0.32"/>
  <add key="Path" value=""/>
  <add key="User" value="hak"/>
  <add key="Pwd" value="fff"/>
  <add key="Port" value="21"/>
  </appSettings>
</configuration>程序代码如下        private void Form1_Load(object sender, EventArgs e)
        {
            try
            {
                _ftpInfo = ReadFtpConfig();
            }
            catch (Exception rex)
            {
                MessageBox.Show("读取配置失败!错误信息:" + rex.Message);
                _isFinishUpdate = true;
                Application.Exit();
                return;
            }
        }
        private FtpInfo ReadFtpConfig()
        {
            FtpInfo ftp = new FtpInfo()
            {
                RemoteHost = ConfigurationSettings.AppSettings["Host"],
                RemotePath = ConfigurationSettings.AppSettings["Path"],
                RemoteUser = ConfigurationSettings.AppSettings["User"],
                RemotePass = ConfigurationSettings.AppSettings["Pwd"],
                RemotePort = int.Parse(ConfigurationSettings.AppSettings["Port"])
            };
            return ftp;
        }        private void button1_Click(object sender, EventArgs e)
        {
            _ftpClient = new FTPClient(_ftpInfo);            try
            {
                _ftpClient.Connect();
            }
            catch (Exception ex)
            {
                MessageBox.Show("连接FTP服务器失败!错误信息:" + ex.Message);
                _isFinishUpdate = true;                return;
            }
        }FtpInfo和FTPClient都是网上找的资源里的,一个是FTP信息的,一个是有关连接的,不知道为什么我每次按钮事件都是user XXX cannot log in.跟踪了connect()的执行
        public void Connect()
        {
            if (!EnsureHostIsIP())
            {
                bConnected = false;
                return;
            }
            socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ep = new IPEndPoint(IPAddress.Parse(_ftp.RemoteHost), _ftp.RemotePort);
            // 鏈結
            try
            {
                socketControl.Connect(ep);
            }
            catch (Exception)
            {
                throw new IOException("Couldn't connect to remote server");
            }
            // 获取应答码
            ReadReply();
            if (iReplyCode != 220)
            {
                DisConnect();
                throw new IOException(strReply.Substring(4));
            }
            // 登陸
            SendCommand("USER " + _ftp.RemoteUser);
            if (!(iReplyCode == 331 || iReplyCode == 230))
            {
                CloseSocketConnect();//关闭连接
                throw new IOException(strReply.Substring(4));
            }
            if (iReplyCode != 230)
            {
                SendCommand("PASS " + _ftp.RemotePass);
                if (!(iReplyCode == 230 || iReplyCode == 202))
                {
                    CloseSocketConnect();//关闭连接
                    throw new IOException(strReply.Substring(4));
                }
            }
            bConnected = true;
            // 切換到目录
            ChangeDir(_ftp.RemotePath);
        }
//每次在红色字体标出的语句执行完后iReplyCode 就变成了510,网上查询了下是未登录的意思,这什么情况,我IIS里默认FTP里设置的是允许匿名登录的啊,为什么这样就登录不了

解决方案 »

  1.   

    https://www.ibm.com/developerworks/cn/linux/l-cn-socketftp/
    每个命令都要以\r\n结尾,你先试下
      

  2.   


            private void SendCommand(String strCommand)
            {
                Byte[] cmdBytes =
                ASCII.GetBytes((strCommand + "\r\n").ToCharArray());
                socketControl.Send(cmdBytes, cmdBytes.Length, 0);
                ReadReply();
            }这个肯定有的,因为用户名那里是通过了的
      

  3.   

    不是啊  匿名是用户名 anonymous  密码不写
      

  4.   


    啊- -我一直以为随便写的,我还试了默认FTP里的那个用户名,也不行