计算机网络课程设计 java实现服务器端的编程.pdf
《计算机网络课程设计 java实现服务器端的编程.pdf》由会员分享,可在线阅读,更多相关《计算机网络课程设计 java实现服务器端的编程.pdf(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机网络课程设计题目:java实现服务器端的编程_ _ _ _ _ _ _ _姓名:王漫漫 学号:321209010411指导教师:王 磊 评阅教师:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _绪论.32相关知识.42.1 FTP工作原理.42.2 ftp工作模式.62.3 ftp传输方式.72.3.1 ASCII传输方式.82.3.2 二进制传输方式.83需求分析.93.1 数据需求.93.2 功能需求.94详细设计.95代码分析.105.1 实现服务器端功能的代码:.105.2 用户登录时对用户的用户,密码,目录处理。.125.3 主
2、函数.155.4 165.5 496运行结果.63绪论1.1绪论随着计算机的普及,网络进入大众的家庭,通过网络共享数据和资源,已不再是什么新鲜的事,尽 管Telnet提供了访问远程文件的极好方法,但怎么也比不上使用自己计算机中的文件方便。如果用户想使用其它计算机上的文件,最理想的方法就是把它COPY到自己的计算机中,以便在本地计算机上操作。那么用什么方法去将远程计算机中的文件获取过来呢?FTP正是完成这项工作的工具。FTP以它所使用的协议:文件传输协议(File Transfer Protocol)来命名的。正如其名所示:协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的
3、位置、联系的方式、以及使用的操作系统无关。假设两台计算机能与FTP协议对话,并且能访问INTERNET,就可以用FTP软件的命令来传输文件。对于不同的操作系统具体操作上可能会有些细微差别,但是其基本的命令结构是相同的。FTP是个非常有用的工具,你可以在任意个可经FTP访问的公共有效的联机数据库或文档中找到你想要的任何东西。全世界现在已有1000多(96年 的 数 据)个FTP文件服务器对所有INTERNET用户开使用,用户可以通过与INTERNET相连的计算机,把自己需要的文件传输过来。FTP采用“客户机/服务器”方式,用户端要在自己的本地计算机上安装FTP客户程序。FTP客户程序有字符界和图
4、形界面(如Cute FTP)两种。2 相关知识2.1 FTP工作原理FTP(File Transfer Protocol),是文件传输协议的简称。用于Internet上的控制文件的双向传输。同时.,它也是一个应用程序。用户可以通过它把自己机器与世界各地所有运FTP协议的服务器相连,访问服务器上的资源和信息。FTP协议在TCP/IP协议栈中的位置如表1:H T T P F T P T E L N S M T P D N S T F T P N M P应用层T C P U D P传输层I P互联网络层X 2 5 I SD N L A N W L A N F D D I A T M网络接口层当启动F
5、TP从远程计算机拷贝文件时,事实上启动了两个程序:一个本地机器上的FTP客户端程序,它向FTP服务器提出拷贝文件的请求。另一个是启动在远程计算机的上的FTP服务器程序,它响应请求把你指定的文件传送到你的计算机中。FTP采 用“客户端/服务器”方式,用户要在自己的本地计算机上安装FTP客户端程序。从根本上说,FTP协议就是在网络中各种不同的计算机之间按照TCP/IP协议来传输文件。FTP协议采用客户端/服务器(Client/Sever)模式,由FTP客户端程序和FTP服务器端程序组成。使用时,先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并
6、执行正确的命令。但是FTP有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用户名和口令,就不能与该主机进行文件传输。但匿名FTP服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必 是 该 远 程 主 机 的 注 册 用 户。用 户 使 用 特 殊 的 用 户 名“Anonymous”或“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将,Email地址作为口令,以便更好地对访问者进行跟综。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载文件,而不允许上载文件。也就是说,用户只能从匿名FTP主机拷贝其需要的文件
7、而不能把文件拷贝到匿名FTP主机。另外,匿名FTP主机还采用了其他一些保护措施以保护自己的文件不至于被用户修改和删除,并防止计算机病毒的侵入。匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息、数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名FTP登陆。2.2ftp工作模式FTP采用C/S(客户端/服务器)模式进行通信,但与其他的C/S模式网络通信协议又有一个很大的区别。通常在进行HTTP通信或是TELNET通信的时候,只需要一个端口进行通信。即客户端只需要连接一个端口进行数据通
8、信。如TELNET的默认端口是2 3,用户从头到尾都只需使用这个端口。但是FTP通信除了有一个默认端口21之外,还需要其他的端口。其中默认端口(2 1)主要进行控制连接,进行命令协议和服务器端的响应码的传输;另外一个非标准端口主要进行数据传递,如文件的上载、下载等。至于非标准端口的产生则要根据用户选择的连接模式而定:如果客户选择的是主动模式(PORT),则需要用户端提供给服务器一个IP地址和一个非标准端口;而如果用户采用被动模式(PASV),则服务器端需要提供给客户端一个IP地址和一个非标准端口。下表是儿个著名的TC P端口号:表2 TC P端口号TCP端口号关键字描述20FTP-DATA文件
9、传输协议数据21FTP文件传输协议控制23TELENET远程登录协议25SMTP简单邮件传输协议53DOMAIN域名服务器80HTTP超文本传输协议110POP3邮局协议119NNTP新闻传送协议F T P 中字节大小有两个:逻辑字节大小和用于传输的字节大小。后者通常是8 位,而前者可不一定是多少了。传输字节不必等于逻辑字节大小,也不必对数据结构进行解释。控制连接是建立在USER-PIT和 SERVER-PI之间用于交换命令与应答的通信链路。数据连接是传输数据的全双工连接,传输数据可以发生在服务器D T P和 用 户 D T P之间也可以发生在两个服务器DTP之间,F T P 可以传输非连续的
10、文件,这些文件的一部分称为页。服 务 器 D T P代表一种传输过程,它通常处于“主动”状态,它和侦听端口建立数据连接,它还可以为传输和存储设置参数,并根据P I 的指令传输数据。当然,D T P也可以转入“被动”状态。服务器F T P 进程,它是和用户F T P 进程一起工作的,它由P I 和D T P组成。在开始阶段,标准F T P 命令由用户P I 产生并通过控制连接传送到服务器进程。服务器P I 向用户P I 返回标准应答。F T P 命令指定数据连接参数和文件系统操作。用 户 D T P在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口不必在开始F T P 命
11、令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听.这个数据连接是全双工的。2.3ftp传输方式F T P协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过f tp协议对话,并且 能 访 问In te rn e t,你 可 以 用f tp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。FT P的传输有两种方式:ASCII传输模式和二进制数据传输模式。2.3.1 ASCII传输方式假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行
12、的不是U N IX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary命令告诉ftp逐字拷贝,不要对这些文件进行处理。2.3.2 二进制传输方式在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系
13、统,在对方系统上,此文件不能执行。如 果 你 在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢,也会损坏数据,使文件变得不能用。3 需求分析设计和实现FTP服务器,主要是 遵 从FTP协议标准实现FTP服务器;允许现有标准的FT P客户端与它互连互通;支持上传和下载文件。3.1 数据需求由于匿名FTP的功能比非匿名FTP有很大的限制,所以为了完成上传下载文件功能,需要设计非匿名FT P,即需要通过账号和密码才能访问此服务器,则服务器需要有创建账号功能,并保存账号信息,这需要建立对应的数据结构表。3.2 功能需求FTP服务器要有可供管理的主界面,并可以通过这个界面来添加
14、删除账号,设置路径,查询信息,并根据需要启动和关闭服务。在起内部需要支持上传下载文件功能。4 详细设计图3-1客户端连接流程图,5 代码分析5.1实现服务器端功能的代码:public class FtpServerprivate Socket socketclient;private int counter;public static String initDir;public static ArrayList users=new ArrayList();public static ArrayList userslnfo=new ArrayList();public FtpServer()(F
15、tpConsole fc=new FtpConsole();fc.start();loadUsersInfo();int counter=1;int i=0;try(监听21号端口ServerSocket s=new ServerSocket(21);仓建服务器端的socket并设置监听端口 21for(;)(接受客户端请求Socket incoming=s.accept();BufferedReader in=new BufferedReader(newInputStreamReader(incoming.getInputStreani();PrintWriter out=newPrintW
16、riter(incoming.getOutputStream(),true);out.println(220 Service ready for new user+counter);/创建服务线程FtpHandler h=new FtpHandler(incoming,i);h.start();users.add(h);counter+;i+;)catch(Exception e)(e.printStackTrace();)/FtpServer()end5.2用户登录时对用户的用户,密码,目录处理。public void loadUsersInfo()String s=getClass().g
17、etResource(user.cfg).toString();s=s.substring(6,s.length();int pl=0;int p2=0;if(new File(s).exists()(try(BufferedReader fin=new BufferedReader(newInputStreamReader(new FilelnputStream(s);String line;String field;int i=0;while(line=fin.readLine()!=null)(Userinfo tempUserlnfo=new Userlnfo();pl=0;p2=0;
18、i=0;if(line.startsWith(#)continue;while(p2=line.indexOf(T,pl)!=-l)(field=line.substring(p 1 ,p2);p2=p2+1;pl=p2;switch(i)case 0:tempUserlnfo.user=field;/System.out.println(tempUserlnfo.user);break;case 1:tempUserlnfo.password=field;/System.out.println(tempUserlnfo.password);break;case 2:tempUserlnfo.
19、workDir=field;/System.out.println(tempUserlnfo.workDir);break;i+;/while(p2=line.indexOf(T,pl)!=-l)endusersInfo.add(tempUserlnfo);/while(line=fin.readLine()!=null)endfin.close();)catch(Exception e)(e.printStackTrace();)/if(new File(s).exists()end/loadUsersInfo()end5.3主函数public static void main(String
20、 args)(if(args.length!=0)initDir=args0;)elseinitDir=c:/;FtpServer ftpServer=new FtpServer();/main end)5.4class FtpHandler extends Thread|Socket csocket;用于控制的套接字Socket dsocket;用于传输的套接字int id;String cmd=;存放指令空格前String param=存放当前指令后的参数String user;String remoteHost=客户 IPint remotePort=0;客户 Tcp 端口号String
21、 dir=FtpServer.initDir;当前 目录String rootdir=c:/;默认根目录,在 checkPASS中设置int state=0;String reply;PrintWriter out;int type=0;String requestfile=boolean isrest=false;int parseInput(String s)(int p=0;int i=-1;p=s.indexOf();if(P=-l)cmd=s;elsecmd=s.substring(0,p);if(p=s.length()II p=-l)param=elseparam=s.subst
22、ring(p+1 ,s.length();cmd=cmd.toUpperCase();if(cmd.equals(USER)i=1;if(cmd.equals(PASS)i=2;if(cmd.equals(ACCT)i=3;if(cmd.equals(CDUP)i=4;if(cmd.equals(SMNT)i=5;if(cmd.equals(CWD)i=6;if(cmd.equals(QUIT)i=7;if(cmd.equals(REIN)i=8;if(cmd.equals(PORT)i=9;if(cmd.equals(PASV)i=10;if(cmd.equals(TYPE)i=11;if(
23、cmd.equals(STRU)i=12;if(cmd.equals(MODE)i=13;if(cmd.equals(RETR)i=14;if(cmd.equals(STOR)i=15;if(cmd.equals(STOU)i=16;if(cmd.equals(APPE)i=17;if(cmd.equals(ALLO)i=18;if(cmd.equals(REST)i=19;if(cmd.equals(RNFR)i=20;if(cmd.equals(RNTO)i=21;if(cmd.equals(ABOR)i=22;if(cmd.equals(DELE)i=23;if(cmd.equals(R
24、MD)i=24;if(cmd.equals(XMKD)i=25;if(cmd.equals(MKD)i=25;if(cmd.equals(PWD)i=26;if(cmd.equaIs(LIST)i=27;if(cmd.equals(NLST)i=28;if(cmd.equals(SITE)i=29;if(cmd.equals(SYST)i=30;if(cmd.equals(HELP)i=31;if(cmd.equals(NOOP)i=32;if(cmd.equals(XPWD)i=33;return i;/parseInput()endint validatePath(String s)(Fi
25、le f=new File(s);if(f.exists()&!f.isDirectory()(String si=s.toLowerCase();String s2=rootdir.toLowerCase();if(sl,startsWith(s2)return 1;elsereturn 0;)f=new File(addTail(dir)+s);if(f.exists()&!f.isDirectory()String si=(addTail(dir)+s).toLowerCase();String s2=rootdir.toLowerCase();if(s l.startsWith(s2)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络课程设计 java实现服务器端的编程 计算机网络 课程设计 java 实现 服务器端 编程
限制150内