这段时间由于工作的关系,一直研究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”类的时出现的问题,相关代码如下:
privatevoidbtnDown_Click(objectsender,EventArgse)
{
//stringURL=@"ftp://admin:admin@"+@txtIP.Text+"//NORFlash//";
stringURL=@"ftp://"+txtIP.Text+"//HardDisk//";
stringstrFileName="";
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(WebExceptionexp)
{
lstInfo.Items.Insert(0,DateTime.Now.ToString()+":错误:"+exp.Message);
return;
}
}
else
{
lstInfo.Items.Insert(0,DateTime.Now.ToString()+":指定文件不存在");
}
}
用这个代码同样出现该问题:
privatevoidUpload(stringuri,stringfilename)
{
FileInfofileInf=newFileInfo(filename);
uri=uri+"//"+fileInf.Name;
FtpWebRequestreqFTP;
//根据uri创建FtpWebRequest对象
reqFTP=(FtpWebRequest)FtpWebRequest.Create(newUri(uri));
//ftp用户名和密码
reqFTP.Credentials=newNetworkCredential("guest","");
//默认为true,连接不会被关闭
//在一个命令之后被执行
reqFTP.KeepAlive=false;
//指定执行什么命令
reqFTP.Method=WebRequestMethods.Ftp.UploadFile;
//指定数据传输类型
reqFTP.UseBinary=true;
//上传文件时通知服务器文件的大小
reqFTP.ContentLength=fileInf.Length;
//缓冲大小设置为2kb
intbuffLength=2048;
byte[]buff=newbyte[buffLength];
intcontentLen;
//打开一个文件流(System.IO.FileStream)去读上传的文件
FileStreamfs=fileInf.OpenRead();
try
{
//把上传的文件写入流
Streamstrm=reqFTP.GetRequestStream();
//每次读文件流的2kb
contentLen=fs.Read(buff,0,buffLength);
//流内容没有结束
while(contentLen!=0)
{
//把内容从filestream写入uploadstream
strm.Write(buff,0,contentLen);
contentLen=fs.Read(buff,0,buffLength);
}
//关闭两个流
strm.Close();
fs.Close();
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message,"UploadError");
}
}
相关界面如下:
服务器,执行到这一步便执行失败,此时客户端程序就会显示如下错误
这是和我编写的FTP Server出现问题,和Wince平台上的FTP,Moxa 设备上的FTP都正常,我程序唯一的不同就是支持中文信息。也许就是中文信息不能识别的问题?果不其然,请看下图:
此时客户端正常:
实际测试发现,“WebClient”类并不是不支持“中文”只要在登录连接过程中ftp Server发送英文信息即可,其他信息可以是中文。
我想这应该是微软的程序的bug,应该其他客户端都能正常使用,难道偏偏该指令的有问题?!
后续的几篇文章,我会继续介绍ftp相关的东西,希望大家多多关注。
[叶帆工作室]
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
相关推荐
FTP服务器FTP服务器FTP服务器FTP服务器FTP服务器FTP服务器FTP服务器FTP服务器
C#基础调试器 <br>对于初学者来说很好的一个软件..试一下吧
FTP:文件传输协议(指令及响应代码),FTP协议规范,ftp协议详解,OSS_tutorial
C# ftp连接到服务器,可从服务器上下载或上传文件!亲测可用!
Ftp服务器2.1是一个绿色的极好免费FTP服务器,当前发布的小型客户使用版本,包含FTP全部常用功能. 本程序系绿色型软件,运行即可,程序无任何插件和后门,更不会连接任何网站. FTPServer.exe Ftp服务器主程序 大小:697KB...
通过使用Serv-U,用户能够将任何一台PC 设置成一个FTP 服务器,这样,用户或其他使用者就能够使用FTP 协议,通过在同一网络上的任何一台PC与FTP 服务器连接,进行文件或目录的复制,移动,创建,和删除等。...
FTP服务器简介 FTP服务 FTP服务就是文件传输服务,FTP的全称是File Transfer Protocol,顾名思义,就是文件传输协议,具备更强的文件传输可靠性和更高的效率。 Windows客户机 FTP服务器(Linux系统) 本地网络 Linux...
HTTP与FTP协议基础
有详细的Windows Server 2012 R2 服务器建立FTP站点方法教程,小白都能可以学会使用,以及 无法连接服务器 处理问题。
qt5.0实现FTP服务器,源码已验证,可直接下载下来使用。
用于连接ftp服务器的工具,可以安装在pc电脑中,方便用于网络连接!
URL形式: // ... 后台方法,将ftp服务器上的PDF文件转成二进制流进行读取 using System.Net; public FileStreamResult GetStreaem(strin
一秒将你的电脑变成ftp服务器 此程序无需安装。打开后,FTP文件夹默认位置是C:\TEMP 更改FTP文件夹位置:断开FTP服务,然后自行选择位置。 比如你的IP是222.71.75.106 那么你的FTP地址就是: FTP://222.71.75.106 ...
已连接. 正等待响应. 220 Microsoft FTP Service USER 123000 331 Password required for 123. PASS xxxxxx 230 User 123 logged in. SYST 215 Windows_NT PWD 257 "/" is current directory. TYPE A 200 Type set ...
ftp服务器ftp服务器ftp服务器ftp服务器ftp服务器ftp服务器ftp服务器ftp服务器
小巧,方便而且实用 FTP连接器,必备的工具!
FTP协议父子连接
搭建WWW服务器和FTP服务器 实验目的: 掌握IIS的安装 掌握WWW服务器的搭建 掌握FTP服务器的搭建 实验内容: 任务一:通过控制面板安装IIS 任务二:搭建WWW服务器 任务三:搭建FTP服务器 实验步骤: 搭建web服务器 ...
内容索引:VC/C++源码,网络相关,FTP ... 目录ftp服务器是一个基于控制台的ftp服务器程序,能够实现大部分的FTP的服务器程序; 注意: a.帐号密码为toldo; b.主目录为c:/temp,在连接之前请先建立;
……综上仅为摘抄,详细内容请点击"FTP服务器如何配置" FTP服务器知识详解--FTP服务器工作模式 主动模式port 在主动模式下,FTP客户端首先与FTP服务器的TP21端口建立连接,通过这个通道发送命令,客户端需要接收...