文件传输服务中,客户机 服务器和服务器之间利用以下哪个连接

15946人阅读
Linux(72)
SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能。比ftp命令方便多了,而且服务器不用再开FTP服务了。rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具。
  windows端需要支持ZModem的telnet/ssh客户端,SecureCRT就可以用SecureCRT登陆到Unix/Linux主机(telnet或ssh均可)。
  上传文件只需在shell终端仿真器中输入命令&rz&,即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器。下载文件只需在shell终端仿真器中输入命令&sz&文件名&,即可利用Zmodem将文件下载到&路径/SecureCRT-5.1.3/download/&目录下。通过&File Transfer&可以修改上传和下载的默认路径。设置默认目录:options--&session options--&file&transfer。
注:选项--&全局选项--&终端,可以设置鼠标的复制粘贴。
如果要改变SecureCRT终端的背景颜色和文件名颜色,只需点击菜单栏上的&选项&-&会话选项&,在&终端&-&仿真&分类的右侧窗口选上&ANSI 颜色&以及&选择一个备用的键盘仿真-Linux&。
总结下securecrt传文件的三种方式.1. scp&&&scp 可以在 2个 linux 主机间复制文件scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 [...] [[user@]host2:]file2
scp -P port user@serverip:/home/user/filename /home/user/filename
以上端口大写 P 为参数,port 端口 user 为ssh user serverip 为远程服务器ip或者域名 ,/home/user/filename 为远程服务器的名 /home/user/filename 为本地服务服务器的文件名。该命令的作用就是将远程的filename复制到本地对应的目录下面。
例如,将文件传到管理服务器[root@localhost ~]# scp ./load.sh yinliu@59.53.86.118
*&复制文件:* 命令格式:scp local_file remote_username@remote_ip:remote_folder或者scp local_file remote_username@remote_ip:remote_file或者scp local_file remote_ip:remote_folder或者scp local_file remote_ip:remote_file 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
* 复制目录:* 命令格式:scp -r local_folder remote_username@remote_ip:remote_folder或者scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要再输入密码;第2个没有指定用户名,命令执行后需要输入用户名和密码;* 例程:scp -r /home/space/music/ root@www.:/home/root/others/scp -r /home/space/music/ www.:/home/root/others/
上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录
======从 远程 复制到 本地======从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;
例如:scp root@www.:/home/root/others/music /home/space/music/i.mp3scp -r www.:/home/root/others/ /home/space/music/
scp的优点是使用简单,缺点是无法列出远端目录和改变目录。&&&2. ZMODEM file send/recv&&&rz: 上传文件只需在shell终端仿真器中输入命令&rz&,即可从弹出的对话框中选择本地磁盘上的文件,利用Zmodem上传到服务器,例如(上传一个rsyncd.conf文件到服务器):  [root@localhost ~]# rz  rz&waiting to receive.  正在开始 zmodem 传输。 按 Ctrl+C 取消。  正在传输 rsyncd.conf...   &100% &&&&715 bytes &715 bytes/s 00:00:01 &&&&&&0 错误&&&sz: 下载文件只需在shell终端仿真器中输入命令&sz 文件名&,即可利用Zmodem将文件下载到&路径/SecureCRT-5.1.3/download/&目录下,例如(下载服务器当前目录下的rsyncd.conf文件到本地):  [root@localhost ~]# sz rsyncd.conf  rz  正在开始 zmodem 传输。 按 Ctrl+C 取消。  正在传输 rsyncd.conf...   &100% &&&&715 bytes &715 bytes/s 00:00:01 &&&&&&0 错误3. sftpsecurecrt&按下ALT+P就开启新的会话 进行ftp操作。输入:help命令,显示该FTP提供所有的命令&&&&&&&&&&pwd:&&查询linux主机所在目录(也就是远程主机目录)&&&&&&&&&&lpwd: 查询本地目录(一般指windows上传文件的目录:我们可以通过查看&选项&下拉框中的&会话选项&,如图二:我们知道本地上传目录为:D:/我的文档)&&&&&&&&&&ls:&&&查询连接到当前linux主机所在目录有哪些文件&&&&&&&&&&lls:&&查询当前本地上传目录有哪些文件&&&&&&&&&&lcd:&&改变本地上传目录的路径&&&&&&&&&&cd:&&&改变远程上传目录&&&&&&&&&&get:&&将远程目录中文件下载到本地目录&&&&&&&&&&put:&&将本地目录中文件上传到远程主机(linux)&&&&&&&&quit: 断开FTP连接&&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:234552次
积分:3798
积分:3798
排名:第4507名
原创:123篇
转载:86篇
译文:19篇
(1)(3)(1)(1)(2)(1)(9)(2)(11)(8)(13)(5)(1)(1)(2)(2)(4)(2)(3)(1)(6)(9)(2)(4)(2)(6)(2)(5)(5)(2)(2)(5)(8)(1)(15)(8)(8)(7)(5)(15)(15)(3)(4)(2)(1)(12)邮件传输服务中,客户机和服务器之间通过什么连接呢?_百度知道
邮件传输服务中,客户机和服务器之间通过什么连接呢?
关于计算机网络问题没相关知识朋友请要随便答谢谢
应该SMTP协议吧SMTP协议设计基于通信模型:针用户邮件请求发送SMTP建立与接收SMTP间建立双向传送通道接收SMTP终接收者间传送者SMTP命令由发送SMTP发由接收SMTP接收应答则反面传送旦传送通道建立SMTP发送者发送MAIL命令指明邮件发送者SMTP接收者接收邮件则返OK应答SMTP发送者再发RCPT命令确认邮件否接收SMTP接收者接收则返OK应答;能接收则发拒绝接收应答(止整邮件操作)双重复接收者收全部邮件接收特别序列接收者功处理邮件则返OK应答SMTP提供传送邮件机制接收与发送连接同传送服务邮件直接由发送主机传送接收主机;或者两者同传送服务通继SMTP服务器传送能够SMTP服务器提供继能力必须拥终目主机址邮箱名称传输介质应该数字信号传输线缆(光缆、网线等)
或模拟信号传输线缆(电线)等
其他类似问题
为您推荐:
客户机的相关知识
其他1条回答
TCP/IP协议
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C# 网络编程系列十二:实现一个简单的FTP服务器
C#,网络,编程,系列,FTP,服务器
&引言:休息一个国庆节后好久没有更新文章了,主要是刚开始休息完心态还没有调整过来的, 现在差不多进入状态了, 所以继续和大家分享下网络编程的知识,在本专题中将和大家分享如何自己实现一个简单的FTP服务器。在我们平时的上网过程中,一般都是使用FTP的客户端来对商家提供的服务器进行访问(上传、下载文件),例如我们经常用到微软的SkyDrive网盘,115网盘等,然而我们经常用到的都是网页版本的,网页版本和客户端版本的不同,网页版本的FTP客户端,它与服务器的交流是使用HTTP协议发出对服务器的请求的,而客户端版本采用的是FTP协议发出命令对服务器进行请求。然后我们接触到FTP服务器却很少的, 所以本专题中将和大家介绍下如何实现一个FTP服务器(不要觉得服务器很深奥一样的,大家可以简单的认为服务器也是一个程序,该程序是对客户端发来的请求做处理的,请求大家可以简单理解为字符串,从这个角度看, 服务器程序就是一个对字符串解析的过程。),也是为后面的一个专题做一个铺垫,因为后面专题将和大家介绍下FTP客户端——文件上传下载器,有了自己自定义的FTP服务器后, 自定义的FTP客户端就可以对自定义的FTP服务器进行访问,使两者形成一个完整的软件,从而也让大家对基于FTP协议的工具有一个初步的了解。一、基于FTP协议的客户端和服务器是如何&沟通的&?FTP客户端和FTP服务器之间的“沟通”分为四个阶段的:1. 启动FTP客户通过FTP客户端软件,发起FTP交互式的命令,就是告诉服务器(也就是一台电脑,服务器上与一个程序(FTP服务)会接收命令,并解析发来的命令,然后发出回复信息)说:“我想和你聊聊天,可以吗?”2. 建立控制连接客户端TCP层根据客户给出的服务器IP地址,向服务器提供FTP服务的21号端口发出主动建立连接的请求,服务器接收到请求后,通过3次握手之后,客户端和服务器之间就建立一个TCP连接(就是一条通道,就好比生活中马路,有了马路之后车才能够在两地之间运送东西),之后,所有用户发出的FTP命令和服务器的回应都是通过该连接来传送的, 所以也把这个TCP连接叫做控制连接,控制连接在用户退出之前一直存在。3. 建立数据连接和进行文件传输现在客户端和服务器端已经建立聊天的通道了(控制连接),但是两者聊天过程中如果互相想赠送礼物要怎么办呢?(这里形象的把客户端和服务器端文件的传输比喻两个人通过聊天后互相赠送礼物的过程),此时我们就需要另外一条马路(数据连接)来进行“礼物的赠送”了,具体赠送礼物的过程如下:1. 客户端通过控制连接向服务器发送一个上传文件的命令时,会自己分配一个临时的TCP端口号。2. 客户端通过控制连接向服务器发送一个命令(下面将会介绍的PORT命令)来告诉服务器自己的IP地址和临时的端口号,然后再发送一条上传文件的命令(可以理解为——客户端要送礼物给服务器时,实际上不是简单的发送一个送礼物命令的,在这之前还需要发送一条自我介绍命令(就是告诉服务器自己的IP地址和端口号)来告诉服务器自己就是刚刚和它聊天的那位,这也很符合我们日常送礼物的流程的,一般大家接到礼物都要弄明白送礼物的人是谁,是不是自己认识的)3.服务器接收到客户端的IP地址和临时端口号后,以这个IP地址和端口号为目标,使用服务器上的20端口(该端口是用来传输数据的端口)向客户端发出主动建立连接的请求。4. 客户端收到请求后,通过3此握手后就与服务器之间建立了另外一条TCP连接——数据连接,即用来互相送礼物的通道。5. 客户端在自己的文件系统中选择要赠送(上传)的文件6. 客户端将文件写入到文件传输进程中(写入网络流中)7. 服务器端将传输来的文件在服务器端的文件系统中进行存储8. 文件传输完成后,由服务器主动关闭该数据的连接4 关闭FTP当用户退出FTP时,通关客户端发送退出命令,之后控制连接被关闭,FTP服务结束。二、从上面的沟通过程中你明白了什么?从上面客户端与服务器端的沟通过程中,这里可以概括几点:(1)客户端与服务器端进行交互过程中,传输层使用的是TCP协议而不是其他传输层协议(2)沟通过程有两条TCP连接——一条是控制连接,即传输命令和响应信息的通道,另一条是数据连接,即传输文件的马路,并且必须先有控制连接才能建立数据连接,因为要进行文件传输首先必须知道客户的IP地址和端口号,这个过程就是通过控制连接传送的命令来告知服务器客户端的IP地址和端口号,之后再在两者之间建立数据连接来传输文件(3)在服务器端,控制连接(端口号为21)和数据连接(端口号 为20)使用了不同的端口号三、赠送礼物的方式?——文件传输模式客户端与FTP服务器建立数据连接之后,首先需要告诉服务器采用哪种文件传输模式,FTP提供了两种文件传输模式,一种是主动(Port)模式,另一种是被动(Passive)模式。主动模式——服务器向客户端发起数据连接请求,被动模式——客户端向服务器发起数据请求。然而两种模式有什么相同点和不同点呢?两种模式的相同点: 服务器都使用21号端口进行用户验证和管理不同点: 传送文件数据的方式不一样,主动模式的FTP服务器数据端口固定在20,而被动模式的FTP服务器数据端口则在之间的随机数。3.1 主动模式主动模式——服务器主动连接客户端,然后传输文件,在这种模式下,FTP客户端先用一个端口N(N&1024)向服务器的21号端口发起控制连接,连接成功后,在发出PORT N+1命令告诉服务器自己监听的端口为N+1;服务器接受到该命令后,用一个新的数据端口(20号端口)与客户端的端口N+1建立连接,然后进行文件传输,而客户端则通过监听N+1端口接受文件数据。注意: 采用主动模式存在一个问题,如果客户端安装了防火墙或在内网时,由于防火墙一般不允许接受外部发起的标准端口以外的连接请求,因此外部FTP服务器就无法使用主动模式穿过防火墙主动连接客户端(这里与客户端连接的端口为N+1(N&1024),非标准端口),从而造成无法传送文件数据,此时就需要采用被动模式传送文件了。3.2 被动模式被动模式——服务器被动接受客户端连接请求,即控制连接请求和数据连接请求都是由客户端发起,在这种模式下,FTP客户端先随机开始一个端口N向服务器的21号端口发起控制连接,然后向服务器发送PASV命令。服务器收到该命令后,会用一个新的端口P(P&1024)进行监听,同时将该端口号告诉客户端,客户端接受到响应命令后,再通过新的端口N+1连接服务器的端口P,然后进行文件数据传输。注意:采用被动模式与主动模式也存在相同的问题,如果服务器安装了防火墙,客户端同样可能无法与服务器端的端口P建立数据请求,因为该请求可能会被防火墙过滤掉。在实际应用中,服务器一般指定一个端口范围,允许客户端与该范围内的端口建立数据连接,而不再这个范围内的端口会被服务器的防火墙过滤掉,从而在一定程度上消除了针对服务器的恶意攻击。四、 FTP协议中有哪些命令的?协议简单说就是一个规范,就好比打牌一样,制定一个大家都能明白的规则,斗地主的规则被大家都认可的,但是私下我们也可以自定义规则来玩的(例如说三个只能带一个等这样的规则),同样FTP规则也是大家都认可的一个协议,我们当然也可以自定义协议。由于.Net平台下目前还没有提供对FTP服务器端开发的类库,因此要实现一个FTP服务器端的应用程序,就必须了解FTP协议的详细内容。4.1 FTP命令有哪些?FTP 协议中规定了一些大家都认识的命令和组成。FTP协议中的命令都由3~4个字母组成,命令与参数之间用空格隔开,每个命令用回车换行结束。(1)访问命令(1)访问命令有:USER命令——格式为:USER &username&, 指定登录的用户名,以便服务器进行身份验证。这个命令通常是控制连接后第一个发出的命令PASS命令——格式为:PASS &password&, 指定用户密码,该命令必须跟在登录用户名命令之后。REIN命令——格式为:REIN, 表示重新初始化用户信息,该命令终止当前USER的传输,同时终止正在传输的数据,然后重置所有参数,并打开控制连接,以便客户端再次发生USER命令。QUIT命令——格式为:QUIT,关闭与服务器的连接(2)模式设置命令:PASV命令——格式为:PASV,该命令告诉FTP服务器,让FTP服务器在指定的数据端口进行监听,被动接受客户端的请求。如果未指定任何模式,FTP服务器默认使用PASV模式PORT命令——格式为:PORT &address&,该命令告诉FTP服务器,客户端监听的端口号是address,让FTP服务器采用主动模式连接客户端。TYPE命令——格式为: TYPE &data type&,该命令指定要传输的数据类型,有ASCII和BINARY两种类型。MODE命令——格式为:MODE &mode&,该命令指定传输模式,S表示流,B表示块,C表示压缩。(3)文件管理命令CWD命令——格式为:CWD &directory&,该命令是用户可以在不同的目录或数据集下工作而不用改变登录信息,directory一般是目录名或与系统相关的文件集合。PWD命令——格式为:PWD,该命令返回当前工作目录。MKD命令——格式为:MKD &directory&,该命令表示在指定路径下创建新目录,directory 表示特定目录的字符串。CDUP命令——格式为:CDUP,该命令表示回到上层目录RMD命令——格式为:RMD &directory&,删除指定目录,directory表示特定目录的字符串。LIST命令——格式为:LIST &name&,该命令返回指定路径下的子目录及文件列表,name 为路径。省略路径时,返回当前路径下的文件列表。NLIST命令——格式为:NLIST &directory&,该命令返回指定路径下的目录列表,省略路径时,返回当前目录。RNFR命令——格式为:RNFR &old path&,该命令表示重新命名文件,该命令的下一条命令用RNTO指定新的文件名。RNTO命令——格式为:RNTO &new path&,该命令和RNFR命令共同完成对文件的重命名。DELE命令——格式为:DELE &filename&,该命令表示删除指定路径下的文件(4)文件传输命令:RETR命令——RETR &filename&,表示下载指定路径的文件STOR命令——STOR &filename&,表示上传一个指定的文件,并将其存储在指定的位置,如果文件已存在,原文件将被覆盖,如果文件不存在,则创建新文件。(5)其他命令SYST命令——格式为:SYST,该命令返回服务器使用的操作系统。4.2 FTP响应码客户端发送FTP命令后,服务器需要返回FTP响应码,响应码即是回答,我们平常聊天中别人问了说了话或者问了问题,另外一方就需要回答,FTP协议中定义以响应码的形式来作为回答,FTP响应码由ASCII编码的3位数字开头,后面接一行文本提示信息,数字和提示信息中有一个空格,如XXX 接收请求。每个响应码同样以回车换行结束。FTP响应码的3位数字每位都有特定的意义,具体见下表:下表列出了常用的响应码所代表的意义:&五、实现自定义的FTP服务器相信大家看完上面的介绍对FTP协议以及FTP客户端和FTP服务器的交互过程有一定的理解的,这时候大家知道理论后就一定很想知道知道这些之后可以做什么的?答案就是可以制作一个简单的FTP服务器,大家可以根据代码来进一步理解FTP协议。下面是程序中一些核心代码片段:// 启动服务器&&&&&&& private void btnFtpServerStartStop_Click(object sender, EventArgs e)&&&&&&& {&&&&&&&&&&& if (myTcpListener == null)&&&&&&&&&&& {&&&&&&&&&&&&&&& listenThread = new Thread(ListenClientConnect);&&&&&&&&&&&&&&& listenThread.IsBackground =&&&&&&&&&&&&&&& listenThread.Start();&&&&&&&&&&&&&&& lstboxStatus.Enabled =&&&&&&&&&&&&&&& lstboxStatus.Items.Clear();&&&&&&&&&&&&&&& lstboxStatus.Items.Add(&启动Ftp服务...&);&&&&&&&&&&&&&&& btnFtpServerStartStop.Text = &停止&;&&&&&&&&&&& }&&&&&&&&&&& else&&&&&&&&&&& {&&&&&&&&&&&&&&& myTcpListener.Stop();&&&&&&&&&&&&&&& myTcpListener =&&&&&&&&&&&&&&& listenThread.Abort();&&&&&&&&&&&&&&& lstboxStatus.Items.Add(&Ftp服务已停止!&);&&&&&&&&&&&&&&& lstboxStatus.TopIndex = lstboxStatus.Items.Count - 1;&&&&&&&&&&&&&&& btnFtpServerStartStop.Text = &启动&;&&&&&&&&&&& }&&&&&&& }&&&&&&& // 监听端口,处理客户端连接&&&&&&& private void ListenClientConnect()&&&&&&& {&&&&&&&&&&& myTcpListener = new TcpListener(IPAddress.Parse(tbxFtpServerIp.Text), int.Parse(tbxFtpServerPort.Text));&&&&&&&&&&& // 开始监听传入的请求&&&&&&&&&&& myTcpListener.Start();&&&&&&&&&&& AddInfo(&启动成功!&);&&&&&&&&&&& AddInfo(&Ftp服务运行中...[单机”停止“退出]&);&&&&&&&&&&& while (true)&&&&&&&&&&& {&&&&&&&&&&&&&&& try&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& // 接收连接请求&&&&&&&&&&&&&&&&&&& TcpClient tcpClient = myTcpListener.AcceptTcpClient();&&&&&&&&&&&&&&&&&&& AddInfo(string.Format(&客户端({0})与本机({1})建立Ftp连接&, tcpClient.Client.RemoteEndPoint, myTcpListener.LocalEndpoint));&&&&&&&&&&&&&&&&&&& User user = new User();&&&&&&&&&&&&&&&&&&& mandSession = new UserSeesion(tcpClient);&&&&&&&&&&&&&&&&&&& user.workDir = tbxFtpRoot.T&&&&&&&&&&&&&&&&&&& Thread t = new Thread(UserProcessing);&&&&&&&&&&&&&&&&&&& t.IsBackground =&&&&&&&&&&&&&&&&&&& t.Start(user);&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& catch&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&&&&&& // 处理客户端用户请求&&&&&&& private void UserProcessing(object obj)&&&&&&& {&&&&&&&&&&& User user = (User)&&&&&&&&&&& string sendString = &220 FTP Server v1.0&;&&&&&&&&&&& RepleyCommandToUser(user, sendString);&&&&&&&&&&& while (true)&&&&&&&&&&& {&&&&&&&&&&&&&&& string receiveString =&&&&&&&&&&&&&&& try&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& // 读取客户端发来的请求信息&&&&&&&&&&&&&&&&&&& receiveString = mandSession.streamReader.ReadLine();&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& catch(Exception ex)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& if (mandSession.tcpClient.Connected == false)&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& AddInfo(string.Format(&客户端({0}断开连接!)&, mandSession.tcpClient.Client.RemoteEndPoint));&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& else&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& AddInfo(&接收命令失败!& + ex.Message);&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& if (receiveString == null)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& AddInfo(&接收字符串为null,结束线程!&);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& AddInfo(string.Format(&来自{0}:[{1}]&, mandSession.tcpClient.Client.RemoteEndPoint, receiveString));&&&&&&&&&&&&&&& &&&&&&&&&&&&&&& // 分解客户端发来的控制信息中的命令和参数&&&&&&&&&&&&&&& string command = receiveS&&&&&&&&&&&&&&& string param = string.E&&&&&&&&&&&&&&& int index = receiveString.IndexOf(' ');&&&&&&&&&&&&&&& if (index != -1)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& command = receiveString.Substring(0, index).ToUpper();&&&&&&&&&&&&&&&&&&& param = receiveString.Substring(command.Length).Trim();&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& // 处理不需登录即可响应的命令(这里只处理QUIT)&&&&&&&&&&&&&&& if (command == &QUIT&)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& // 关闭TCP连接并释放与其关联的所有资源&&&&&&&&&&&&&&&&&&& mandSession.Close();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& else&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& switch (user.loginOK)&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& // 等待用户输入用户名:&&&&&&&&&&&&&&&&&&&&&&& case 0:&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandUser(user, command, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 等待用户输入密码&&&&&&&&&&&&&&&&&&&&&&& case 1:&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandPassword(user, command, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 用户名和密码验证正确后登陆&&&&&&&&&&&&&&&&&&&&&&& case 2:&&&&&&&&&&&&&&&&&&&&&&&&&&& switch (command)&&&&&&&&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &CWD&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandCWD(user, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &PWD&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandPWD(user);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &PASV&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandPASV(user);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &PORT&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandPORT(user, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &LIST&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandLIST(user, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &NLIST&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandLIST(user, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 处理下载文件命令&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &RETR&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandRETR(user, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 处理上传文件命令&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &STOR&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandSTOR(user, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 处理删除命令&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &DELE&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandDELE(user, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 使用Type命令在ASCII和二进制模式进行变换&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& case &TYPE&:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CommandTYPE(user, param);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& default:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& sendString = &502 command is not implemented.&;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& RepleyCommandToUser(user, sendString);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&& &&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&& &&&&&&& }程序演示截图:首先在F:\盘下新建文件夹MyFtpServerRoot,在其中创建目录结构并放一些文件资源,例如图片,文档等,程序中演示的目录结构如下图:这样,本地的FTP服务站点就已经建好了,运行FTP服务器程序,然后点击“启动”按钮后就启动了FTP服务器,运行结果如下图所示:然后配合上个专题中实现的FTP客户端来完成与FTP服务器的“聊天”演示,因为FTP服务器程序中已经初始化用户名和密码(都为admin),所以FTP客户端中取消选择“匿名复选框”,直接输入用户名和密码为admin后点击“登录”按钮后就完成了用户验证的过程,并与FTP服务器建立了控制连接和数据连接。运行结果如下图:当然用户可以通过&上传&、“下载”和删除按钮来对FTP服务器上的文件进行操作,这里就不贴出运行图片了, 大家可以下载源码来测试下的。六、内容的结尾,说说后面的计划吧这个专题介绍完后,我这个C#网络编程系列也就介绍完了,这个系列中主要介绍网络编程的一些入门知识,对于朋友在留言中经常提到的“打洞”技术以及一些网络编程中一些更难的内容还大家一起努力来学习的,同时我也会在后面和大家分享下一些实际开发过程中的网络编程的内容(在后面的文章打算和大家分享一个下载器的实现),最后,希望这个系列可以让大家对网络协议有一个最初的入门,这样在实际的开发过程中才知道这些实现背后的原理。之后我总结下我这个系列的所有文章的索引,以便让大家更好的阅读和查找关于这个系列的所有文章。&
编程语言与程序设计专题推荐
Copyright & 2004 -
版权所有 中文域名:站长.cn 站长.中国
中国 苏ICP备号
免责声明:以上教程信息由会员自行搜集、整理、发布,内容的真实性、准确性和合法性由发布会员负责。站长学院对此不承担任何责任。

我要回帖

更多关于 客户机ping不通服务器 的文章

 

随机推荐