设为首页 收藏本站
查看: 1300|回复: 0

Snake.Net网络通讯模块

[复制链接]

尚未签到

发表于 2015-5-26 12:05:00 | 显示全部楼层 |阅读模式

作者: Bruce
  

  本页内容
  简介
登录FTP服务器
获取目录和文件列表
主动模式与被动模式
目录操作
上传和下载文件
断点续传
删除文件
  
  
  简介
  文件传输协议(FILE TRANSFER PROTOCOL)是一个用于在两台装有不同操作系统的机器中传输计算机文件的软件标准。它属于网络协议组的应用层。
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unencode一样。FTP服务一般运行在两个端口上。端口21用于传输控制流,并且是命令通向ftp服务器的进口。另一个端口用于在客户端和服务器之间传输数据流,端口号将由系统自动分配。使用FTP协议传输文件有以下优点:
1. 促进文件的共享(计算机程序或数据)
2. 鼓励间接或者隐式的使用远程计算机
3. 向用户屏蔽不同主机中各种文件存储系统的细节
4. 可靠和高效的传输数据
在命名空间Eastasp.Framework.Net.Ftp下,Snake.Net提供一系列类和函数,可以为开发者提供全面而完善的使用FTP协议传输文件的功能。现在主要介绍FtpClient和FtpExpress 两个类是如何实现发送传输文件的功能。

登录FTP服务器
  
FTP一般需要用户名和密码才能登录,也可以使用匿名登录,此时一般以Anonymous作为用户名登录,用户的Email地址作为密码。请看演示代码。

//declare
FtpServer server;
FtpClient client;

server = new FtpServer("ftp.server.com", "user", "password");
client = new FtpClient(server);

try{
         client.Open();
         client.Noop();
}
finally{
         if (client != null){
                   client.Close(); client = null;
         }
}  获取目录和文件列表
  
文件夹和文件在FTP服务器上按照一定的规则进行管理,就如同本地文件夹一样。一般而言,在FTP服务器上存放了大量的文件并按照一定的规律进行放置,使用者必须浏览目录,然后选择自己需要的文件,进行下载。FtpClient提供了List命令列出服务器上的文件夹河文件。请看演示代码:

//declare
FtpServer server;
FtpClient client;
string remotePath;
FtpPoint point;
FtpFileInfo[] files;
FtpDirectoryInfo[] directories;

remotePath = "";
server = new FtpServer("ftp.server.com", "user", "password");
client = new FtpClient(server);

try{
         client.Open();
         client.Type(FtpTransferType.ASCII);
         point = client.List(remotePath);

         //get directories
         directories = point.Directories;
         if (directories.Length > 0){
                   for (int i = 0; i < directories.Length; i++){
                            Console.WriteLine(directories.Name);
                   }
         }

         //get files
         files = point.Files;
         if (files.Length > 0){
                   for(int i = 0; i < files.Length; i++){
                            Console.WriteLine(files.Name);
                   }
         }
}
finally{
         if (client != null){
                   client.Close(); client = null;
         }
}  
针对不同的FTP服务器软件,FTP目录输出的格式也不尽相同。主要有两种Unix和MSDOS,当前绝大多数FTP服务器使用的是Unix格式,一般情况下只有IIS下的FTP可能会是MSDOS格式,可以设置FtpServer对象的Type属性将其设置为MSDOS模式请看下面的代码:

//declare
FtpServer server;

server = new FtpServer("ftp.server.com", "user", "password");
server.Type = FtpServerType.MsDos;  
  主动模式与被动模式
  
FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。主动模式和被动模式在Snake.Net里分别对应FtpConnectionType枚举类型的Port和Pasv。你可以通过FtpClient的ConnectionType属性进行设置。

//declare
FtpClient client;
client.ConnectionType = FtpConnectionType.Port;  

目录操作
  
如同本地目录一样对Ftp服务器上的目录也可以进行创建、删除、重命名等操作。FtpClient提供了以下命令用于操作服务器断的目录。
Pwd 获取当前目录位置信息
Cwd 将指定目录设置为当前目录
Mkd 在当前目录下创建指定目录
Rmd 在当前目录下删除指定目录
Move 变更目录名称,此命令对文件同样有效。

//declare
FtpClient client;

//initialize
client = new FtpClient(new FtpServer("ftp.server.com", "user", "password"));
client.ConnectionType = FtpConnectionType.Port;

try{
         client.Open();
         client.Noop();

         //changes the current directory
         client.Cwd("/");
         client.Type(FtpTransferType.ASCII);

         //create directory t
         client.Mkd("t");

         //changes the current directory
         client.Cwd("t");

         //output current directory info
         Console.WriteLine(client.Pwd());

         //create directory aa and bb
         client.Mkd("aa"); client.Mkd("bb");

         //rename directory aa to cc
         client.Move("aa", "cc");

         //delete directory bb and cc
         client.Rmd("bb"); client.Rmd("cc");

         //go up directory
         client.Cwd("..");

         //delete directory t
         client.Rmd("t");
}
finally{
         if (client != null){
                   client.Close(); client = null;
         }
}  
上传和下载文件

FTP既然是文件传输协议,上传和下载当然是其最主要的功能,FtpClient提供Store方法用于上传文件,Retrieve方法用于下载文件。请看一下上传的演示代码:

//declare
FtpClient client;
string localFile;

localFile = @"c:\a.dat";
client = new FtpClient(new FtpServer("ftp.server.com", "user", "password"));
client.ConnectionType = FtpConnectionType.Port;

try{
         client.Open(); client.Noop();
         client.Type(FtpTransferType.Image);
         client.Store(localFile);
}
finally{
         if (client != null){
                  client.Close(); client = null;
         }
}  接下来我们在看一下文件下载的演示代码:

//declare
FtpClient client;
string localFile, remoteFile;

remoteFile = "a.dat";
localFile = string.Format(@"c:\2{0}", remoteFile);
client = new FtpClient(new FtpServer("ftp.server.com", "user", "password"));
client.ConnectionType = FtpConnectionType.Port;

try{
         client.Open(); client.Noop();
         client.Type(FtpTransferType.Image);
         client.Retrieve(localFile, remoteFile);
}
finally{
         if (client != null){
                   client.Close(); client = null;
         }
}  
断点续传
  
有时用户通过FTP上传或下载文件需历时数小时,万一线路中断,不具有FTP断点续传的FTP服务器就只能从头重传; 对于具有断点续传功能的服务器来说,允许用户从上次断掉的地方继续传送,而不必从头开始。FtpClient使用Rest命令设置断点。FtpClient的Store和Retrieve方法自身也支持对文件的断点支持。参见下面代码:

//设置断点
client.Rest(1000);

//上传文件
client.Store(localFile);

//从文件第1000个字节后上传
client.Store(localFile, 1000);  Store和Retrieve方法提供了多种不同的参数,实现了各种情况下的文件上传和下载。

删除文件
  
删除一个远程Ftp服务器上的文件比较简单,只需调用FtpClient的Delete命令即可,请看代码:

//declare
FtpClient client;
string remoteFile;

remoteFile = "a.dat";
client = new FtpClient(new FtpServer("ftp.server.com", "user", "password"));
client.ConnectionType = FtpConnectionType.Port;

try{
         client.Open(); client.Noop();
         client.Type(FtpTransferType.Image);
         client.Delete(remoteFile);
}
finally{
         if (client != null){
                   client.Close(); client = null;
         }
}  

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-70883-1-1.html 上篇帖子: 用socket封装ftp类。 下篇帖子: GIS ftp
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表