FTP登陆问题

dota_sky_god 2013-07-25 10:09:36
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里设置的是允许匿名登录的啊,为什么这样就登录不了
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dota_sky_god 2013-07-25
  • 打赏
  • 举报
回复
引用 6 楼 liuliuwujie1108 的回复:
不是啊 匿名是用户名 anonymous 密码不写
多谢指点,终于过了登陆了0.0散分结贴
dota_sky_god 2013-07-25
  • 打赏
  • 举报
回复
引用 6 楼 liuliuwujie1108 的回复:
不是啊 匿名是用户名 anonymous 密码不写
啊- -我一直以为随便写的,我还试了默认FTP里的那个用户名,也不行。。。
liuliuwujie1108 2013-07-25
  • 打赏
  • 举报
回复
不是啊 匿名是用户名 anonymous 密码不写
dota_sky_god 2013-07-25
  • 打赏
  • 举报
回复
引用 4 楼 liuliuwujie1108 的回复:
应该是你的配置文件用户名跟密码不对
那个不是随便写的么- -
liuliuwujie1108 2013-07-25
  • 打赏
  • 举报
回复
应该是你的配置文件用户名跟密码不对
dota_sky_god 2013-07-25
  • 打赏
  • 举报
回复
引用 2 楼 dongxinxi 的回复:
https://www.ibm.com/developerworks/cn/linux/l-cn-socketftp/ 每个命令都要以\r\n结尾,你先试下
private void SendCommand(String strCommand) { Byte[] cmdBytes = ASCII.GetBytes((strCommand + "\r\n").ToCharArray()); socketControl.Send(cmdBytes, cmdBytes.Length, 0); ReadReply(); } 这个肯定有的,因为用户名那里是通过了的
  • 打赏
  • 举报
回复
https://www.ibm.com/developerworks/cn/linux/l-cn-socketftp/ 每个命令都要以\r\n结尾,你先试下
liuliuwujie1108 2013-07-25
  • 打赏
  • 举报
回复
有没有看服务端的信息

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧