FTP基础连接已关闭:服务器提交了协议冲突(C#)解决办法

.net中FTP GetResponse“基础连接已关闭:服务器提交了协议冲突”的解决办法:
原创:钟德荣(xjzdr@163.com)

欢迎访问我的blog

http://blog.csdn.net/xjzdr/

在vs2005开发的一个版本下载程序中,将新版本上传到FTP服务器上,通过.net的FTPGetResponse下载新的版本,
和服务器建立连接时即报错:“基础连接已关闭:服务器提交了协议冲突”。
但使用CUTPFT客户端下载是正常的。

FTP服务器上SER_U建立。已经使用了很久了,所以也不可能重新建FTP的服务器。
这个程序在许多的企业的应用中已经使用,说明我的FTP下载的程序是没有任何问题的。
该下载程序在FTP服务器是XINXP、 WIN2000、WIN2003下均使用过,前面没有出现过任何的问题。

代码太多,其中的一个方法取得服务器上文件列表的代码如下:
 private string[] GetFileList(string ftpServerIP, string ftpUserID,string strFtpPort, string ftpPassword)
        {
            string[] downloadFiles;
            StringBuilder result = new StringBuilder();
            FtpWebRequest reqFTP;
            try
            {
              

                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP+":"+strFtpPort + "/"));
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

               // reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;//获取FTP服务器上的文件大小
                WebResponse response = reqFTP.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string line = reader.ReadLine();


                while (line != null && line != "")
                {
                    // if (line.StartsWith(TelCode))//如果是StartsWith以TelCode开头的文件名
                    //{
                    //string s=Encoding.UTF8.
                    result.Append(line.ToLower());
                    result.Append("/n");


                    line = reader.ReadLine();


                }

                result.Remove(result.ToString().LastIndexOf('/n'), 1);
                reader.Close();
                response.Close();
                return result.ToString().Split('/n');
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                downloadFiles = null;
                return downloadFiles;
            }
        }//GetFileList结束

但在部署一个企业的应用时,就在  WebResponse response = reqFTP.GetResponse();出现错误:基础连接已关闭:服务器提交了协议冲突。
在网上查了许多,也没有说出过解决摲办法。
在偿试了多种SER-U的版本和WINDOWS的版本后,其它的都正常,但我要连接的那台服务器就不行。
仍没有找到解决办法。

最后,从网上的一个贴子中得到启示:
“.net中的FTP服务器不支持中消息。”,最后才发现,在FTP服务器中设置了一个中文的消息。
在“域/站点/设置/消息”的界面中,下方有4个消息定义的部分,在该消息定义中,设置了中文消息,
所以,在FTP客户端连接时,即出现“基础连接已关闭:服务器提交了协议冲突”的错误了。
删除消息中的中文消息,下载程序正常运行。反复测试后,确信就是这个中文消息的问题。
看来,.net中的FTP相关的类确实是有BUG的。

在FTP文件上传时,如果出现中文消息,仍会报这个错误。这个没有测试。应该是会的。

欢迎访问我的blog

http://blog.csdn.net/xjzdr/


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xjzdr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值