日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FTP之‘基础连接已关闭:服务器提交了协议冲突’错误探析

發布時間:2025/7/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FTP之‘基础连接已关闭:服务器提交了协议冲突’错误探析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這段時間由于工作的關系,一直研究FTP 服務器/客戶端的相關程序,發現了不少問題,有些確實是微軟的bug(或者說相關代碼不夠健壯) 。

一、微軟IE瀏覽器作為FTP客戶端的bug

?????? 上傳含中文字符的多級目錄的失敗的bug,文件名是否中文無關,只要目錄中出現中文字符,就會出現該問題。用網絡嗅探器探測交互的數據發現,創建多個目錄成功后,在用“CWD”命令調轉當前目錄時FTP客戶端出現bug,含中文字符的目錄名稱,中文信息被過濾掉,導致整個拷貝過程失敗。

?????? 這個bug微軟某個版本的補丁應該修改了(相關信息我沒有查到),因為在Vista系統上IE的ftp客戶端正常。我的出現問題的系統是Windows XP sp2,IE6.0。有心的朋友可以測試一下。

二、“基礎連接已關閉:服務器提交了協議沖突”的錯誤信息

????? 這個問題應該很出名,在網上可以搜索一大片,不過大部分是Http協議沖突,少有ftp的。我這里僅是針對ftp使用過程中的問題。

????? 這個問題是在使用微軟.net 2.0 框架集 “WebClient”類的時出現的問題,相關代碼如下:???

?private void btnDown_Click(object sender, EventArgs e)
??????? {
??????????? //string URL =? @"ftp://admin:admin@"+@txtIP.Text+"//NORFlash//";
??????????? string URL = @"ftp://" + txtIP.Text + "//HardDisk//";
??????????? string strFileName = "";

??????????? lstInfo.Items.Clear();

??????????? if (openFileDialog.ShowDialog() == DialogResult.OK)
??????????? {
??????????????? strFileName = openFileDialog.FileName;
??????????? }
??????????? else
??????????? {
??????????????? lstInfo.Items.Insert(0, DateTime.Now.ToString() + " : 用戶取消操作");
??????????????? return;
??????????? }

??????????? //-----------------------------------------------
??????????? if (File.Exists(strFileName) == true)
??????????? {
??????????????? try
??????????????? {
??????????????????? lstInfo.Items.Insert(0, DateTime.Now.ToString() + " : 開始下載 ...");
??????????????????? Application.DoEvents();???????????????????
??????????????????? client.UploadFile(URL + @"/AAA.text", strFileName);???????????????????
??????????????????? lstInfo.Items.Insert(0, DateTime.Now.ToString() + " : 下載完畢");
??????????????????? Application.DoEvents();
??????????????? }
??????????????? catch (WebException exp)
??????????????? {
??????????????????? lstInfo.Items.Insert(0, DateTime.Now.ToString() + " : 錯誤:" + exp.Message);
??????????????????? return;
??????????????? }
??????????? }
??????????? else
??????????? {
??????????????? lstInfo.Items.Insert(0, DateTime.Now.ToString() + " : 指定文件不存在");
??????????? }??????????

??????? }
用這個代碼同樣出現該問題:

??????? private void Upload(string uri,string filename)
??????? {
??????????? FileInfo fileInf = new FileInfo(filename);
??????????? uri = uri+"//"+ fileInf.Name;
??????????? FtpWebRequest reqFTP;

??????????? // 根據uri創建FtpWebRequest對象
??????????? reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

??????????? // ftp用戶名和密碼
??????????? reqFTP.Credentials = new NetworkCredential("guest", "");

??????????? // 默認為true,連接不會被關閉
??????????? // 在一個命令之后被執行
??????????? reqFTP.KeepAlive = false;

??????????? // 指定執行什么命令
??????????? reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

??????????? // 指定數據傳輸類型
??????????? reqFTP.UseBinary = true;

??????????? // 上傳文件時通知服務器文件的大小
??????????? reqFTP.ContentLength = fileInf.Length;

??????????? // 緩沖大小設置為2kb
??????????? int buffLength = 2048;

??????????? byte[] buff = new byte[buffLength];
??????????? int contentLen;

??????????? // 打開一個文件流 (System.IO.FileStream) 去讀上傳的文件
??????????? FileStream fs = fileInf.OpenRead();
??????????? try
??????????? {
??????????????? // 把上傳的文件寫入流
??????????????? Stream strm = reqFTP.GetRequestStream();

??????????????? // 每次讀文件流的2kb
??????????????? contentLen = fs.Read(buff, 0, buffLength);

??????????????? // 流內容沒有結束
??????????????? while (contentLen != 0)
??????????????? {
??????????????????? // 把內容從file stream 寫入 upload stream
??????????????????? strm.Write(buff, 0, contentLen);

??????????????????? contentLen = fs.Read(buff, 0, buffLength);
??????????????? }

??????????????? // 關閉兩個流
??????????????? strm.Close();
??????????????? fs.Close();
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? MessageBox.Show(ex.Message, "Upload Error");
??????????? }
??????? }
?相關界面如下:?

?

服務器,執行到這一步便執行失敗,此時客戶端程序就會顯示如下錯誤

?

這是和我編寫的FTP Server出現問題,和Wince平臺上的FTP,Moxa 設備上的FTP都正常,我程序唯一的不同就是支持中文信息。也許就是中文信息不能識別的問題?果不其然,請看下圖:

?

此時客戶端正常:

?

?實際測試發現,“WebClient”類并不是不支持“中文”只要在登錄連接過程中ftp Server發送英文信息即可,其他信息可以是中文。

我想這應該是微軟的程序的bug,應該其他客戶端都能正常使用,難道偏偏該指令的有問題?!

后續的幾篇文章,我會繼續介紹ftp相關的東西,希望大家多多關注。

?

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的FTP之‘基础连接已关闭:服务器提交了协议冲突’错误探析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。