基于UDP的网络日期计算服务系统.docx
- 文档编号:27031762
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:6
- 大小:19.99KB
基于UDP的网络日期计算服务系统.docx
《基于UDP的网络日期计算服务系统.docx》由会员分享,可在线阅读,更多相关《基于UDP的网络日期计算服务系统.docx(6页珍藏版)》请在冰豆网上搜索。
基于UDP的网络日期计算服务系统
基于UDP的网络日期计算服务系统
西安建筑科技大学华清学院计算机网络课程设计报告专业班级:
姓名:
学号:
指导教师:
2019年1月10日目录一、引言3二、基于TCP的程序设计3三、基于UDP的程序设计四、基于UDP的网络日期计算服务系统9五、心得体会11一、引言本学期我们学习了计算机网络自顶向下方法这门课程,在这门课程中,我们将因特网分成应用层,运输层,网络层,链路层,物理层这五个层次进行一一学习。
其中运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。
该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。
运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能。
网络应用程序可以使用多种运输层协议。
例如:
因特网有两种协议,即TCP和UDP,这两种协议都能为其调用的应用程序提供一组不同的运输层服务。
计算机网络日期计算系统是基于UDP协议的,二、基于TCP的程序设计1.基本原理:
TCP是面向连接的可靠的传输层协议。
它支持在并不可靠的网络上实现面向链接的可靠的数据传输。
1.1特点:
(1)三次握手:
建立可靠连接。
(2)端口号:
多路复用。
(3)完整性校验:
差错检测。
(4)确认机制:
应答接受。
(5)序列号:
丢失检测,乱序重排。
(6)窗口机制:
流量控制,拥塞控制。
2.程序调试遇到的问题及解决2.1错误调试:
由于服务器端可以不带选项进行启动,所以对服务器端的错误调试主要是带错误选项的调试;而客户端的错误调试包括不带选项启动、带不正确的端口号或者主机名启动,以及服务器为启动时启动客户端。
(1)服务器端选项错误:
①客户端不带选项:
客户端启动时必须带选项(服务器端IP地址或者主机名、端口号),如果不带选项启动则会出错并终止程序。
②服务器未启动时,启动客户端:
如果未启动服务器时就启动客户端,将不能正确连接到服务器端。
③客户端端口号或主机名不正确:
如果服务器端已经启动(服务器端IP地址为动态分配IP地址,端口号为),但是客户端启动时端口号、服务器IP地址或主机名有一个不正确将不能正确连接到服务器端。
(2)带正确选项的测试:
①以默认主机号名和端口号启动服务器:
假设服务器端IP地址为192.168.1.101,端口号为2345。
如果客户端有到服务器端的连接,则在客户端会显示连接信息,信息中包括客户端的IP地址。
由于这里是在同一台主机上,则这里将显示相应的客户端IP地址,但前提是服务器端不是以192.168.1.101为地址启动,而是相应的服务器端所在主机的IP地址或者主机名为地址来启动。
启动服务器端后,以正确的服务器端IP地址和端口号启动客户端,这时将在客户端显示连接信息,并显示来自服务器端的相应=A。
而服务器端的连接信息则显示IP地址,端口号及即等于A。
②带选项启动服务器:
服务器端也可以以指定选项的方式启动,2.2程序:
①Server:
packageniuchunlu;importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.InputStreamReader;importjava.net.ServerSocket;importjava.net.Socket;publicclassTCPServer{publicstaticvoidmain(Stringargv[])throwsException{StringclientSentence;StringcapitalizedSentence;ServerSocketwelcomeSocket=newServerSocket(2345);System.out.println(服务器正常启动);while(true){SocketconnectionSocket=welcomeSocket.accept();BufferedReaderinFromClient=newBufferedReader(newInputStreamReader(connectionSocket.getInputStream()));DataOutputStreamoutToClient=newDataOutputStream(connectionSocket.getOutputStream());clientSentence=inFromClient.readLine();capitalizedSentence=clientSentence.toUpperCase()+‘\n’;outToClient.writeBytes(capitalizedSentence);}}}②Client:
packageniuchunlu;importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.InputStreamReader;importjava.net.Socket;publicclassTCPClient{publicstaticvoidmain(Stringargv[])throwsException{Stringsentence;StringmodifiedSentence;BufferedReaderinFromUser=newBufferedReader(newInputStreamReader(System.in));SocketclientSocket=newSocket(127.0.0.1,2345);DataOutputStreamoutToServer=newDataOutputStream(clientSocket.getOutputStream());BufferedReaderinFromServer=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));sentence=inFromUser.readLine();outToServer.writeBytes(sentence+‘\n’);modifiedSentence=inFromServer.readLine();System.out.println(FROMSERVER:
+modifiedSentence);clientSocket.close();}}三、基于UDP的程序设计1.基本原理:
UDP是无连接的传输协议,主要用于支持在较可靠的链路上的数据传输,或用于对延迟较敏感的应用。
实现简单,资源占用少,实时性强,适用于可靠性高的网络和延迟敏感的应用。
2.特点:
(1)记录端口信息。
(2)非连接的传送特性。
(3)可以降低对计算机资源的需求。
(4)不必进行数据完整性的检测(不可靠传输)。
(5)适用于多点传送或广播传送等一对多的传送方式。
2.程序调试遇到的问题及解决2.1错误调试:
2.2程序:
①Server:
packagesocket;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.InetAddress;importjava.net.ServerSocket;importjava.net.Socket;publicclassServer{publicstaticvoidmain(String[]args){ServerSocketserver=null;DataInputStreamdin=null;DataOutputStreamdout=null;try{server=newServerSocket(2019);//定义服务器端的接受对象,并指定接收端口/**端口(Port):
使我们解析输入数据依赖的标记。
*/System.out.println(服务器启动...);while(true){Socketsc=server.accept();//获得来自客户端的IPInetAddressip=sc.getInetAddress();//通过socket对象得到客户端IPSystem.out.println(收到来自IP:
+ip+发送来的消息:
);intport=sc.getPort();//通过socket对像得到客户端发送这条消息的端口System.out.println(客户端端口:
+port);din=newDataInputStream(sc.getInputStream());Stringmes=din.readUTF();System.out.println(mes);//发送回执消息dout=newDataOutputStream(sc.getOutputStream());dout.writeUTF(服务器收到了);try{if(din!
=null)din.close();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{if(dout!
=null)dout.close();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{if(sc!
=null)sc.close();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}②Client:
packagesocket;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.Socket;importjava.net.UnknownHostException;importjavax.swing.JOptionPane;publicclassClient{publicstaticvoidmain(String[]args){Socketsc=null;Stringmes=JOptionPane.showInputDialog(输入发送消息);DataOutputStreamdout=null;DataInputStreamdin=null;try{//捕获异常情况sc=newSocket(169.254.74.168,2019);//指定发送消息的Socket对象,dout=newDataOutputStream(sc.getOutputStream());//指定流对象对socket对象指向的服务器进行连接通道dout.writeUTF(mes);//发送消息//接收回执消息din=newDataInputStream(sc.getInputStream());StringgetMes=din.readUTF();System.out.println(服务器回执消息:
+getMes);}catch(UnknownHostExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}finally{try{if(dout!
=null)dout.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{if(sc!
=null)sc.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}四、基于UDP的网络日期计算服务系统1.系统任务描述:
客户端可以向服务器查询日期。
(1)当前的日期和时间
(2)C给出任意一天,S返回距离现在多少天。
2.协议描述网络日期计算服务系统是基于UDP协议的,UDP是无连接的传输协议,主要用于支持在较可靠的链路上的数据传输,或用于对延迟较敏感的应用。
实现简单,资源占用少,实时性强,适用于可靠性高的网络和延迟敏感的应用。
3.基本原理3.1为使程序美观,使用了JFrame和不同的LayoutManager(比如FlowLayout、BorderLayout、GridLayout)进行布局设计,同时限定了窗体的大小;3.2为将文本框中的字符串转换为日期编写了toDate()方法,其中包括日期输入错误操作的日期时被复用的异常处理;3.3因为要实现键盘的输入操作,将操作时使用的几个方法(pressButton等)封装起来,使其可供监听器调为能通过键盘操作,注册了键盘监听器;3.4为判断当前是否处于输入状态(否则处于程序提示状态),使用布尔型属性inputing标记当前状态,当其为false时,向文本框中输入字符会先清空文本框;3.5为实现确定按钮操作、使用了ButtonActionListener方法来监听输入结束或者输入正确,并计算出所输入的日期和当前日期之间的差数。
3.6考虑到DateCalaculator类与客户端和服务端之间的调用关系设计了DateCalaculator类的一些get和set的方法,并通过这些方法的调用来实现参数之间的传递,由此实现了基于UDP的C/S日期服务的计算。
4.程序调试遇到的问题及解决4.1错误调试:
4.1.14.2程序:
①Server:
packagedateCalcutor;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.net.InetAddress;importjava.net.ServerSocket;importjava.net.Socket;publicclassServer{publicstaticvoidmain(String[]args){ServerSocketserver=null;ObjectInputStreamdin=null;ObjectOutputStreamdout=null;try{server=newServerSocket(2222);//定义服务器端的接受对象,并指定接收端口System.out.println(服务器启动...);while(true){Socketsc=server.accept();//会造成线程阻塞//获得来自客户端的IPInetAddressip=sc.getInetAddress();//通过socket对象得到客户端IPSystem.out.println(收到来自IP:
+ip+发送来的消息:
);intport=sc.getPort();//通过socket对像得到客户端发送这条消息的端口System.out.println(客户端端口:
+port);din=newObjectInputStream(sc.getInputStream());//DateCalculatordc=(DateCalculator)din.readObject();//System.out.println(dc);try{Thread.sleep(6000);}catch(InterruptedExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}//发送回执消息dout=newObjectOutputStream(sc.getOutputStream());//dout.writeObject(dc);try{if(din!
=null)din.close();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{if(dout!
=null)dout.close();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{if(sc!
=null)sc.close();}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}②Client:
packagedateCalcutor;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.net.Socket;importjava.net.UnknownHostException;publicclassClient{privatestaticDateCalculatordc=newDateCalculator();publicstaticvoidmain(String[]args){Socketsc=null;ObjectOutputStreamdout=null;ObjectInputStreamdin=null;//try{//sc=newSocket(192.168.3.42,2222);//指定发送消息的Socket对象,//dout=newObjectOutputStream(sc.getOutputStream());//指定流对象对socket对象指向的服务器进行连接通道//dc.getResult();//接收回执消息//din=newObjectInputStream(sc.getInputStream());//DateCalculatorgetDate=(DateCalculator)din.readObject();//System.out.println(服务器回执消息:
\n+(getDate.getResultdate()));//getDate.getResultdate().setText(getDate+);//}//catch(UnknownHostExceptione){//TODOAuto-generatedcatchblock//e.printStackTrace();//}//catch(ClassNotFoundExceptione){//TODOAuto-generatedcatchblock//e.printStackTrace();//}//catch(IOExceptione){//TODOAuto-generatedcatchblock//e.printStackTrace();//}//finally{//try{//if(dout!
=null)//dout.close();//}catch(IOExceptione){//TODOAuto-generatedcatchblock//e.printStackTrace();//}//try{//if(sc!
=null)//sc.close();//}//catch(IOExceptione)//{//TODOAuto-generatedcatchblock//e.printStackTrace();//}}//}privatestaticvoidDateCalculator(Stringstring){newDateCalculator();//TODOAuto-generatedmethodstub//returnnull;}}五、心得经过两个星期的课程设计,过程曲折可谓一言难尽,从开始时满富激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无常。
生活就是这样,汗水预示着结果也见证着收获。
我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有实践的机会,但我们可以,而且设计也是团队的任务,一起工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这了洒下。
对我们而言,知识上的收获重要,精神上的丰收更加可贵。
这次课设将比成为我人生旅途上一个非常美好的回忆。
在本次课程设计中,我们的设计题目是基于UDP的网络日期计算系统,这段时间里,我不但对课本上的知识有了更深的了解和巩固,而且我还学到了平时在课堂上都学习不到的知识,使我对计算机网络有了更加完整的认识。
短暂的时间里,我学到了很
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 UDP 网络 日期 计算 服务 系统