当前位置:编程学习 > C#/ASP.NET >>

C#实现FTP客户端登录报错

捕捉到 System.Net.WebException
  Message=基础连接已经关闭: 接收时发生错误。
  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。 --------------------编程问答--------------------
引用 1 楼 guwei4037 的回复:
先确保你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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,