当前位置: 首页 > news >正文

百度网站主要提供的服务建筑工程网格化区域划片管理制度

百度网站主要提供的服务,建筑工程网格化区域划片管理制度,深圳龙华区鹭湖社区,公司管理系统叫什么引言#xff1a; 休息一个国庆节后好久没有更新文章了#xff0c;主要是刚开始休息完心态还没有调整过来的#xff0c; 现在差不多进入状态了#xff0c; 所以继续和大家分享下网络编程的知识#xff0c;在本专题中将和大家分享如何自己实现一个简单的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. 建立数据连接和进行文件传输 现在客户端和服务器端已经建立聊天的通道了控制连接但是两者聊天过程中如果互相想赠送礼物要怎么办呢(这里形象的把客户端和服务器端文件的传输比喻两个人通过聊天后互相赠送礼物的过程)此时我们就需要另外一条马路数据连接来进行“礼物的赠送”了具体赠送礼物的过程如下  客户端通过控制连接向服务器发送一个上传文件的命令时会自己分配一个临时的TCP端口号。 客户端通过控制连接向服务器发送一个命令下面将会介绍的PORT命令来告诉服务器自己的IP地址和临时的端口号然后再发送一条上传文件的命令可以理解为——客户端要送礼物给服务器时实际上不是简单的发送一个送礼物命令的在这之前还需要发送一条自我介绍命令就是告诉服务器自己的IP地址和端口号来告诉服务器自己就是刚刚和它聊天的那位这也很符合我们日常送礼物的流程的一般大家接到礼物都要弄明白送礼物的人是谁是不是自己认识的服务器接收到客户端的IP地址和临时端口号后以这个IP地址和端口号为目标使用服务器上的20端口该端口是用来传输数据的端口向客户端发出主动建立连接的请求。 客户端收到请求后通过3此握手后就与服务器之间建立了另外一条TCP连接——数据连接即用来互相送礼物的通道。 客户端在自己的文件系统中选择要赠送上传的文件 客户端将文件写入到文件传输进程中写入网络流中 服务器端将传输来的文件在服务器端的文件系统中进行存储 文件传输完成后由服务器主动关闭该数据的连接4 关闭FTP 当用户退出FTP时通关客户端发送退出命令之后控制连接被关闭FTP服务结束。 二、从上面的沟通过程中你明白了什么 从上面客户端与服务器端的沟通过程中这里可以概括几点 1客户端与服务器端进行交互过程中传输层使用的是TCP协议而不是其他传输层协议 2沟通过程有两条TCP连接——一条是控制连接即传输命令和响应信息的通道另一条是数据连接即传输文件的马路并且必须先有控制连接才能建立数据连接因为要进行文件传输首先必须知道客户的IP地址和端口号这个过程就是通过控制连接传送的命令来告知服务器客户端的IP地址和端口号之后再在两者之间建立数据连接来传输文件 3在服务器端控制连接端口号为21和数据连接端口号 为20使用了不同的端口号 三、赠送礼物的方式——文件传输模式 客户端与FTP服务器建立数据连接之后首先需要告诉服务器采用哪种文件传输模式FTP提供了两种文件传输模式一种是主动Port模式另一种是被动Passive模式。 主动模式——服务器向客户端发起数据连接请求被动模式——客户端向服务器发起数据请求。 然而两种模式有什么相同点和不同点呢 两种模式的相同点 服务器都使用21号端口进行用户验证和管理 不同点 传送文件数据的方式不一样主动模式的FTP服务器数据端口固定在20而被动模式的FTP服务器数据端口则在1025~65535之间的随机数。 3.1 主动模式 主动模式——服务器主动连接客户端然后传输文件在这种模式下FTP客户端先用一个端口NN1024向服务器的21号端口发起控制连接连接成功后在发出PORT N1命令告诉服务器自己监听的端口为N1;服务器接受到该命令后用一个新的数据端口20号端口与客户端的端口N1建立连接然后进行文件传输而客户端则通过监听N1端口接受文件数据。 注意 采用主动模式存在一个问题如果客户端安装了防火墙或在内网时由于防火墙一般不允许接受外部发起的标准端口以外的连接请求因此外部FTP服务器就无法使用主动模式穿过防火墙主动连接客户端这里与客户端连接的端口为N1(N1024),非标准端口从而造成无法传送文件数据此时就需要采用被动模式传送文件了。 3.2 被动模式 被动模式——服务器被动接受客户端连接请求即控制连接请求和数据连接请求都是由客户端发起在这种模式下FTP客户端先随机开始一个端口N向服务器的21号端口发起控制连接然后向服务器发送PASV命令。服务器收到该命令后会用一个新的端口P(P1024)进行监听同时将该端口号告诉客户端客户端接受到响应命令后再通过新的端口N1连接服务器的端口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位数字每位都有特定的意义具体见下表 响应码 表示 第 1 位 数 字 1XX 表示信息已被服务器正确接收但尚未被处理 2XX 表示信息已被服务器正确处理完毕 3XX 彪西信息已被服务器正在接受并正在处理中 4XX 表示信息处理错误暂时 5XX 表示信息处理错误永久 第 2 位 数 字 X0X 表示语法错误 X1X 表示系统状态与信息 X2X 表示与FTP服务器系统连接状态 X3X 表示与用户认证有关的信息 X4X 表示未定义 X5X 表示与文件系统有关的信息  下表列出了常用的响应码所代表的意义 响应码 意义 响应码 意义 110 重新启动标记应答 332 登陆是需要账户信息 120 服务在指定时间内准备好 350 请求的文件操作需要进一步命令 125 数据连接打开——开始传输 421 服务关闭 150 文件状态良好将要打开数据连接 425 不能打开数据连接 200 命令成功 426 关闭连接终止传输 202 命令没有执行 450 文件不可用 211 系统状态回复 451 中止请求操作:有本地错误 212 目录状态回复 452 磁盘空间不足 213 文件状态回复 500 无效命令 214 帮助信息回复 501 语法错误 215 系统类型回复 502 命令未执行 220 服务就绪 503 命令顺序错误 221 服务关闭控制连接可以退出登陆 504 无效命令参数 225 数据连接打开无传输正在进行 530 未登陆 226 关闭数据连接请求的文件操作成功 532 存储文件需要账户信息 227 进入被动模式 550 未执行请求操作 230 用户已登陆 551 请求操作终止:页类型未知 250 请求的文件操作完成 552 请求文件操作终止超过存储分配 257 创建路径名 553 为执行请求的操作:文件名不合法 331 用户名正确需要口令     五、实现自定义的FTP服务器 相信大家看完上面的介绍对FTP协议以及FTP客户端和FTP服务器的交互过程有一定的理解的这时候大家知道理论后就一定很想知道知道这些之后可以做什么的答案就是可以制作一个简单的FTP服务器大家可以根据代码来进一步理解FTP协议。下面是程序中一些核心代码片段 View Code // 启动服务器private void btnFtpServerStartStop_Click(object sender, EventArgs e){if (myTcpListener null){listenThread new Thread(ListenClientConnect);listenThread.IsBackground true;listenThread.Start();lstboxStatus.Enabled true;lstboxStatus.Items.Clear();lstboxStatus.Items.Add(启动Ftp服务...);btnFtpServerStartStop.Text 停止;}else{myTcpListener.Stop();myTcpListener null;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();user.commandSession new UserSeesion(tcpClient);user.workDir tbxFtpRoot.Text;Thread t new Thread(UserProcessing);t.IsBackground true;t.Start(user);}catch{break;}}}// 处理客户端用户请求private void UserProcessing(object obj){User user (User)obj;string sendString 220 FTP Server v1.0;RepleyCommandToUser(user, sendString);while (true){string receiveString null;try{// 读取客户端发来的请求信息receiveString user.commandSession.streamReader.ReadLine();}catch(Exception ex){if (user.commandSession.tcpClient.Connected false){AddInfo(string.Format(客户端({0}断开连接), user.commandSession.tcpClient.Client.RemoteEndPoint));}else{AddInfo(接收命令失败 ex.Message);}break;}if (receiveString null){AddInfo(接收字符串为null,结束线程);break;}AddInfo(string.Format(来自{0}[{1}], user.commandSession.tcpClient.Client.RemoteEndPoint, receiveString));// 分解客户端发来的控制信息中的命令和参数string command receiveString;string param string.Empty;int index receiveString.IndexOf( );if (index ! -1){command receiveString.Substring(0, index).ToUpper();param receiveString.Substring(command.Length).Trim();}// 处理不需登录即可响应的命令这里只处理QUITif (command QUIT){// 关闭TCP连接并释放与其关联的所有资源user.commandSession.Close();return;}else{switch (user.loginOK){// 等待用户输入用户名case 0:CommandUser(user, command, param);break;// 等待用户输入密码case 1:CommandPassword(user, command, param);break;// 用户名和密码验证正确后登陆case 2:switch (command){case CWD:CommandCWD(user, param);break;case PWD:CommandPWD(user);break;case PASV:CommandPASV(user);break;case PORT:CommandPORT(user, param);break;case LIST:CommandLIST(user, param);break;case NLIST:CommandLIST(user, param);break;// 处理下载文件命令case RETR:CommandRETR(user, param);break;// 处理上传文件命令case STOR:CommandSTOR(user, param);break;// 处理删除命令case DELE:CommandDELE(user, param);break;// 使用Type命令在ASCII和二进制模式进行变换case TYPE:CommandTYPE(user, param);break;default:sendString 502 command is not implemented.;RepleyCommandToUser(user, sendString);break;}break;} }} }   程序演示截图  首先在F:\盘下新建文件夹MyFtpServerRoot,在其中创建目录结构并放一些文件资源例如图片文档等程序中演示的目录结构如下图  这样本地的FTP服务站点就已经建好了运行FTP服务器程序然后点击“启动”按钮后就启动了FTP服务器运行结果如下图所示 然后配合上个专题中实现的FTP客户端来完成与FTP服务器的“聊天”演示因为FTP服务器程序中已经初始化用户名和密码都为admin,所以FTP客户端中取消选择“匿名复选框”直接输入用户名和密码为admin后点击“登录”按钮后就完成了用户验证的过程并与FTP服务器建立了控制连接和数据连接。运行结果如下图 当然用户可以通过上传、“下载”和删除按钮来对FTP服务器上的文件进行操作这里就不贴出运行图片了 大家可以下载源码来测试下的。   六、内容的结尾说说后面的计划吧 这个专题介绍完后我这个C#网络编程系列也就介绍完了这个系列中主要介绍网络编程的一些入门知识对于朋友在留言中经常提到的“打洞”技术以及一些网络编程中一些更难的内容还大家一起努力来学习的同时我也会在后面和大家分享下一些实际开发过程中的网络编程的内容在后面的文章打算和大家分享一个下载器的实现最后希望这个系列可以让大家对网络协议有一个最初的入门这样在实际的开发过程中才知道这些实现背后的原理。之后我总结下我这个系列的所有文章的索引以便让大家更好的阅读和查找关于这个系列的所有文章。   源码下载http://files.cnblogs.com/zhili/FtpServer.zip大家如果觉得不错的话还请大家推荐下谢谢大家的支持  用来演示的服务器目录http://files.cnblogs.com/zhili/MyFtpServerRoot.zip  上个专题FTP文件上传下载器源码http://files.cnblogs.com/zhili/FTPUpDownloader.zip    转载于:https://www.cnblogs.com/zhili/archive/2012/10/18/FTPServer.html
http://www.sadfv.cn/news/79491/

相关文章:

  • 网站飘窗 两学一做电影模板哪个网站好
  • 常州 做网站网站开发语言比例
  • 科技广告公司网站建设给个网站急急急2021
  • 建设一个网站需要做哪些工作深圳seo外包公司
  • 北京正规网站建设公司清溪网站建设
  • 做公司网站主要需要什么科目建设局象山网站
  • 有做国际网站生意吗湖北省建设厅网站上岗证查询
  • 网站备案 机构需要什么手续外贸网站建设行业发展
  • 用logo做ppt模板下载网站wordpress贴内幻灯片
  • 网站建设策划书附录海报模板网
  • 网站外链工具做网站的算什么行业
  • 搬家网站建设公司用wordpress建立的网站
  • 包头网站建设平台广和柳州住房城乡建设厅官方网站
  • vps如果制作论坛网站广西茶叶网站建设
  • 刚做的网站搜索不到企业网站禁忌
  • 网站开发,自定义首页显示响应式设计是什么意思
  • 网站 设计做一个中英文网站多少钱
  • 织梦网站需要付费吗.net网站架设
  • 什么是门户网站广告网站网络推广方案
  • 什么网站可以做新闻听写it咨询公司排名
  • 杭州外贸网站制作建网站的哪家好
  • 宁波做网站制作北国网
  • 潍坊网站建设 中公苏州微网站建设公司
  • 马鞍山网站建设文域名如何做网站
  • 网站发布内容是否过滤站长工具seo综合查询 正品蓝导航
  • 免费移动网站模板下载龙海网站建设价格
  • 扬州西区网站建设园林绿化东莞网站建设
  • 爱站查询工具专业全网推广建站公司
  • 网站开发招聘名称深圳外贸公司有哪些公司
  • 网站建设需要那些人才网站建设勹金手指下拉