C#实现FTP客户端登录报错
捕捉到 System.Net.WebExceptionMessage=基础连接已经关闭: 接收时发生错误。
Source=System
StackTrace:
在 System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
在 System.Net.FtpWebRequest.RequestCallback(Object obj)
在 System.Net.CommandStream.Dispose(Boolean disposing)
在 System.IO.Stream.Close()
在 System.IO.Stream.Dispose()
在 System.Net.ConnectionPool.Destroy(PooledStream pooledStream)
在 System.Net.ConnectionPool.PutConnection(PooledStream pooledStream, Object owningObject, Int32 creationTimeout, Boolean canReuse)
在 System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
在 System.Net.FtpWebRequest.GetResponse()
在 FTPUpDownloader.Form1.GetFtpResponse(FtpWebRequest request) 位置 C:\Users\hh\Downloads\11.28\FTPUpDownloader\FTPUpDownloader\Form1.cs:行号 103
InnerException:
各位大大给看下吧 --------------------编程问答-------------------- 先确保你ftp服务端没问题(比如你用ftp client软件正常登录)然后用这里面的方法试试http://blog.csdn.net/chinacsharper/article/details/9501773。 --------------------编程问答--------------------
我的FTP服务端也是用C#实现的我用DOS操作FTP服务端可以实现上传下载列表显示。
我的FTP客户端在IIS上搭建的FTP服务 也可以正常使用,但是用我C#实现的FTP客户端和C#实现的服务端连接的话就报基础连接被关闭错!跪求解决方法啊 --------------------编程问答-------------------- 最好贴代码啊 --------------------编程问答--------------------
// 创建FTP连接
private FtpWebRequest CreateFtpWebRequest(string uri, string requestMethod)
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(uri);
request.Credentials = networkCredential;
request.KeepAlive = true;
request.UseBinary = true;
request.Method = requestMethod;
return request;
}
// 获取服务器返回的响应体
private FtpWebResponse GetFtpResponse(FtpWebRequest request)
{
FtpWebResponse response = null;
try
{
response = (FtpWebResponse)request.GetResponse();//检索包含从 FTP 服务器上发送的响应数据的流
lstbxFtpState.Items.Add("验证完毕,服务器回应信息:[" + response.WelcomeMessage + "]");
lstbxFtpState.Items.Add("正在连接:[ " + response.BannerMessage + "]");
lstbxFtpState.TopIndex = lstbxFtpState.Items.Count - 1;
return response;
}
catch(WebException ex)
{
lstbxFtpState.Items.Add("发送错误。返回信息为:" + ex.Status);
lstbxFtpState.TopIndex = lstbxFtpState.Items.Count - 1;
return null;
}
}
#endregion
#region 登录模块的实现
// 登录服务器事件
private void btnlogin_Click(object sender, EventArgs e)
{
if (tbxServerIp.Text == string.Empty)
{
MessageBox.Show("请先填写服务器IP地址", "提示");
return;
}
ftpUristring = "ftp://" + tbxServerIp.Text;
networkCredential = new NetworkCredential(tbxUsername.Text, tbxPassword.Text);
if (ShowFtpFileAndDirectory() == true)
{
btnlogin.Enabled = false;
btnlogout.Enabled = true;
lstbxFtpResources.Enabled = true;
lstbxFtpState.Enabled = true;
tbxServerIp.Enabled = false;
if (chkbxAnonymous.Checked == false)
{
tbxUsername.Enabled = false;
tbxPassword.Enabled = false;
chkbxAnonymous.Enabled = false;
}
else
{
chkbxAnonymous.Enabled = false;
}
tbxloginmessage.Text = "登录成功";
btnUpload.Enabled = true;
btndownload.Enabled = true;
btnDelete.Enabled = true;
}
else
{
lstbxFtpState.Enabled = true;
tbxloginmessage.Text = "登录失败";
}
}
// 显示资源列表
private bool ShowFtpFileAndDirectory()
{
lstbxFtpResources.Items.Clear();
string uri = string.Empty;
if (currentDir == "/")
{
uri = ftpUristring;
}
else
{
uri = ftpUristring + currentDir;
}
string[] urifield = uri.Split(' ');
uri = urifield[0];
FtpWebRequest request = CreateFtpWebRequest(uri, WebRequestMethods.Ftp.ListDirectoryDetails);
// 获得服务器返回的响应信息
FtpWebResponse response = GetFtpResponse(request);
if (response == null)
{
return false;
}
lstbxFtpState.Items.Add("连接成功,服务器返回的是:"+response.StatusCode+" "+response.StatusDescription);
// 读取网络流数据
Stream stream = response.GetResponseStream();
StreamReader streamReader = new StreamReader(stream,Encoding.Default);
lstbxFtpState.Items.Add("获取响应流....");
string s = streamReader.ReadToEnd();
streamReader.Close();
stream.Close();
response.Close();
lstbxFtpState.Items.Add("传输完成");
客户端主要代码 --------------------编程问答-------------------- 人工置顶啊...
补充:.NET技术 , C#