基于UDP的网络日期计算服务系统.doc

上传人:精*** 文档编号:882072 上传时间:2024-03-11 格式:DOC 页数:15 大小:74.05KB
下载 相关 举报
基于UDP的网络日期计算服务系统.doc_第1页
第1页 / 共15页
基于UDP的网络日期计算服务系统.doc_第2页
第2页 / 共15页
基于UDP的网络日期计算服务系统.doc_第3页
第3页 / 共15页
基于UDP的网络日期计算服务系统.doc_第4页
第4页 / 共15页
基于UDP的网络日期计算服务系统.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、目 录一、 引言3二、 基于TCP的程序设计3三、 基于UDP的程序设计四、 基于UDP的网络日期计算服务系统9五、 心得体会11一、引言 本学期我们学习了计算机网络自顶向下方法这门课程,在这门课程中,我们将因特网分成应用层,运输层,网络层,链路层,物理层这五个层次进行一一学习。其中运输层位于应用层和网络层之间,是分层的网络体系结构的重要部分。该层为运行在不同主机上的应用进程提供直接的通信服务起着至关重要的作用。运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信功能。网络应用程序可以使用多种运输层协议。例如:因特网有两种协议,即TCP和UDP,这两种协议都能为其调用的应用程序提供一组不同

2、的运输层服务。计算机网络日期计算系统是基于UDP协议的,二、基于TCP的程序设计1.基本原理:TCP是面向连接的可靠的传输层协议。它支持在并不可靠的网络上实现面向链接的可靠的数据传输。1.1 特点:(1)三次握手:建立可靠连接。(2)端口号:多路复用。(3)完整性校验:差错检测。(4)确认机制:应答接受。(5)序列号:丢失检测,乱序重排。(6)窗口机制:流量控制,拥塞控制。2.程序调试遇到的问题及解决2.1错误调试:由于服务器端可以不带选项进行启动,所以对服务器端的错误调试主要是带错误选项的调试;而客户端的错误调试包括不带选项启动、带不正确的端口号或者主机名启动,以及服务器为启动时启动客户端。

3、 (1)服务器端选项错误: 客户端不带选项:客户端启动时必须带选项(服务器端IP地址或者主机名、端口号),如果不带选项启动则会出错并终止程序。 服务器未启动时,启动客户端:如果未启动服务器时就启动客户端,将不能正确连接到服务器端。 客户端端口号或主机名不正确:如果服务器端已经启动(服务器端IP地址为动态分配IP地址,端口号为“”),但是客户端启动时端口号、服务器IP地址或主机名有一个不正确将不能正确连接到服务器端。 (2) 带正确选项的测试: 以默认主机号名和端口号启动服务器:假设服务器端IP地址为“192.168.1.101”,端口号为“2345”。如果客户端有到服务器端的连接,则在客户端会

4、显示连接信息,信息中包括客户端的IP地址。由于这里是在同一台主机上,则这里将显示相应的客户端IP地址,但前提是服务器端不是以“192.168.1.101”为地址启动,而是相应的服务器端所在主机的IP地址或者主机名为地址来启动。启动服务器端后,以正确的服务器端IP地址和端口号启动客户端,这时将在客户端显示连接信息,并显示来自服务器端的相应=A。而服务器端的连接信息则显示IP地址,端口号及即等于 A。 带选项启动服务器:服务器端也可以以指定选项的方式启动, 2.2程序:Server:package niuchunlu;import java.io.BufferedReader;import jav

5、a.io.DataOutputStream;import java.io.InputStreamReader;import .ServerSocket;import .Socket;public class TCPServer public static void main(String argv) throws ExceptionString clientSentence;String capitalizedSentence;ServerSocket welcomeSocket = new ServerSocket(2345);System.out.println(服务器正常启动);whil

6、e(true) Socket connectionSocket = welcomeSocket.accept();BufferedReader inFromClient =new BufferedReader(newInputStreamReader(connectionSocket.getInputStream();DataOutputStream outToClient =new DataOutputStream(connectionSocket.getOutputStream();clientSentence = inFromClient.readLine();capitalizedSe

7、ntence = clientSentence.toUpperCase() + n;outToClient.writeBytes(capitalizedSentence);Client: package niuchunlu;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStreamReader;import .Socket;public class TCPClient public static void main(String argv) throws Exception S

8、tring sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in); Socket clientSocket = new Socket(127.0.0.1, 2345); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream(); BufferedReader inFromServer = new BufferedR

9、eader(new InputStreamReader(clientSocket.getInputStream(); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + n); modifiedSentence = inFromServer.readLine(); System.out.println(FROM SERVER: + modifiedSentence); clientSocket.close(); 三、基于UDP的程序设计1.基本原理:UDP是无连接的传输协议,主要用于支持在较可靠的链路上的数据传

10、输,或用于对延迟较敏感的应用。实现简单,资源占用少,实时性强,适用于可靠性高的网络和延迟敏感的应用。2.特点:(1)记录端口信息。(2)非连接的传送特性。(3)可以降低对计算机资源的需求。(4)不必进行数据完整性的检测(不可靠传输)。(5)适用于多点传送或广播传送等一对多的传送方式。2.程序调试遇到的问题及解决2.1错误调试:2.2程序:Server:package socket;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .InetAddres

11、s;import .ServerSocket;import .Socket;public class Server public static void main(String args) ServerSocket server=null;DataInputStream din=null;DataOutputStream dout=null;try server=new ServerSocket(2000);/ 定义服务器端的接受对象,并指定接收端口/* * 端口(Port):使我们解析输入数据依赖的标记。 */System.out.println(服务器启动.);while(true)Soc

12、ket sc=server.accept();/获得来自客户端的IPInetAddress ip=sc.getInetAddress();/通过socket对象得到客户端IPSystem.out.println(收到来自IP:+ip+发送来的消息:);int port =sc.getPort();/通过socket对像得到客户端发送这条消息的端口System.out.println(客户端端口:+port);din=new DataInputStream(sc.getInputStream();String mes=din.readUTF();System.out.println(mes);/

13、 发送回执消息dout=new DataOutputStream(sc.getOutputStream();dout.writeUTF(服务器收到了); try if(din!=null)din.close(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); try if(dout!=null)dout.close(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); try if(sc!=nu

14、ll)sc.close(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();Client:package socket;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import .Socket;import .U

15、nknownHostException;import javax.swing.JOptionPane;public class Client public static void main(String args) Socket sc=null;String mes=JOptionPane.showInputDialog(输入发送消息);DataOutputStream dout=null;DataInputStream din=null;try /捕获异常情况sc=new Socket(169.254.74.168,2000);/ 指定发送消息的Socket对象,dout=new DataO

16、utputStream(sc.getOutputStream();/指定流对象对socket对象指向的服务器进行连接通道dout.writeUTF(mes);/发送消息/接收回执消息din=new DataInputStream(sc.getInputStream();String getMes=din.readUTF();System.out.println(服务器回执消息:+getMes); catch (UnknownHostException e) / TODO Auto-generated catch blocke.printStackTrace(); catch (IOExcept

17、ion e) / TODO Auto-generated catch blocke.printStackTrace(); finally try if(dout!=null)dout.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();try if(sc!=null)sc.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();四、基于UDP的网络日期计算服务系统1.系

18、统任务描述:客户端可以向服务器查询日期。(1)当前的日期和时间(2)C给出任意一天,S返回距离现在多少天。2.协议描述网络日期计算服务系统是基于UDP协议的,UDP是无连接的传输协议,主要用于支持在较可靠的链路上的数据传输,或用于对延迟较敏感的应用。实现简单,资源占用少,实时性强,适用于可靠性高的网络和延迟敏感的应用。3.基本原理3.1为使程序美观,使用了JFrame和不同的LayoutManager(比如FlowLayout、BorderLayout、GridLayout)进行布局设计,同时限定了窗体的大小;3.2为将文本框中的字符串转换为日期编写了toDate()方法,其中包括日期输入错误

19、操作的日期时被复用的异常处理;3.3 因为要实现键盘的输入操作,将操作时使用的几个方法(pressButton 等)封装起来,使其可供监听器调为能通过键盘操作,注册了键盘监听器;3.4 为判断当前是否处于输入状态(否则处于程序提示状态),使用布尔型属性inputing标记当前状态,当其为false时,向文本框中输入字符会先清空文本框;3.5 为实现确定按钮操作、使用了ButtonActionListener方法来监听输入结束或者输入正确,并计算出所输入的日期和当前日期之间的差数。3.6 考虑到DateCalaculator类与客户端和服务端之间的调用关系设计了DateCalaculator类的

20、一些get和set的方法,并通过这些方法的调用来实现参数之间的传递,由此实现了基于UDP的C/S 日期服务的计算。4.程序调试遇到的问题及解决4.1错误调试:4.1.14.2程序:Server:package dateCalcutor;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .InetAddress;import .ServerSocket;import .Socket;public class Server public stati

21、c void main(String args) ServerSocket server=null;ObjectInputStream din=null;ObjectOutputStream dout=null;try server=new ServerSocket(2222);/ 定义服务器端的接受对象,并指定接收端口System.out.println(服务器启动.);while(true)Socket sc=server.accept();/ 会造成线程阻塞/获得来自客户端的IPInetAddress ip=sc.getInetAddress();/通过socket对象得到客户端IPSy

22、stem.out.println(收到来自IP:+ip+发送来的消息:);int port =sc.getPort();/通过socket对像得到客户端发送这条消息的端口System.out.println(客户端端口:+port);din=new ObjectInputStream(sc.getInputStream();/DateCalculator dc=(DateCalculator)din.readObject();/System.out.println(dc);try Thread.sleep(6000); catch (InterruptedException e1) / TOD

23、O Auto-generated catch blocke1.printStackTrace();/ 发送回执消息dout=new ObjectOutputStream(sc.getOutputStream();/dout.writeObject(dc);try if(din!=null)din.close(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();try if(dout!=null)dout.close(); catch (Exception e) / TODO Auto-gener

24、ated catch blocke.printStackTrace();try if(sc!=null)sc.close(); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();Client:package dateCalcutor;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import .Socket;import .UnknownHostExcepti

25、on;public class Client private static DateCalculator dc = new DateCalculator() ;public static void main(String args) Socket sc=null;ObjectOutputStream dout=null;ObjectInputStream din=null;/try /sc=new Socket(192.168.3.42,2222);/ 指定发送消息的Socket对象,/dout=new ObjectOutputStream(sc.getOutputStream();/指定流对

26、象对socket对象指向的服务器进行连接通道/dc.getResult();/接收回执消息/din=new ObjectInputStream(sc.getInputStream();/DateCalculator getDate=(DateCalculator)din.readObject();/System.out.println(服务器回执消息:n+(getDate.getResultdate();/getDate.getResultdate().setText(getDate+);/ /catch (UnknownHostException e) / TODO Auto-generat

27、ed catch block/e.printStackTrace();/ /catch (ClassNotFoundException e) / TODO Auto-generated catch block/e.printStackTrace();/ /catch (IOException e) / TODO Auto-generated catch block/e.printStackTrace();/ /finally/try /if(dout!=null)/dout.close();/ catch (IOException e) / TODO Auto-generated catch

28、block/e.printStackTrace();/try /if(sc!=null)/sc.close();/ /catch (IOException e) / TODO Auto-generated catch block/e.printStackTrace();/private static void DateCalculator(String string) new DateCalculator();/ TODO Auto-generated method stub/return null;五、心得经过两个星期的课程设计,过程曲折可谓一言难尽,从开始时满富激情到最后汗水背后的复杂心情

29、,点点滴滴无不令我回味无常。生活就是这样,汗水预示着结果也见证着收获。我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有实践的机会,但我们可以,而且设计也是团队的任务,一起工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这了洒下。对我们而言,知识上的收获重要,精神上的丰收更加可贵。这次课设将比成为我人生旅途上一个非常美好的回忆。在本次课程设计中,我们的设计题目是基于UDP的网络日期计算系统,这段时间里,我不但对课本上的知识有了更深的了解和巩固,而且我还学到了平时在课堂上都学习不到的知识,使我对计算机网络有了更加完整的认识。短暂的时间里,我学到了很多知识,熟悉了好多

30、程序代码,也认识到自己很多不足的地方。这次课程设计给了我们一次应用自己所学知识的机会,使我对计算机网络及java这方面有更深层次理解,让我们深刻体会到了互相协作的好处,总感觉,一个人的力量是有限的,多请教别人,虚心求问是我在以后学习中需要多多发扬的,经过老师的帮助和我们组的共同努力才克服了重重问题和困难。当然最重要的是,学习计算机网络以及java语言,熟悉,程序,这次我们的课题是基于的网络日期计算系统,使用语言编写程序。网络日期计算系统依据基于UDP/IP的网络时间服务协议对主从同步算法进行了实验,给出了结果和分析。尽管该实验的方案略显简单,程序设计也不是很难,但该实验的数据处理和误差分析的难

31、度及工作量却较大,最后结果有一定的合理性。而且,通过本次课设,我也学会了综合学过的知识进行编写程序来更好的实现课题,是很好的实践,也为以后的学习奠定了良好的基础,是对自己综合能力的一种提高。参考文献:1(美)库罗斯(Kurose,J.F),计算机网络自顶向下方法,机械工业出版社,北京,2008,122(美)昊斯特曼(Horstmann,C.S.),Java核心技术,机械工业出版社,北京,2008,53(美)威尔顿,麦可匹克.,JavaScript入门经典(第3版),清华大学出版社,北京,20094 (美)Bruce Eckel,,Java编程思想.,陈昊鹏译,机械工业出版社,北京,20075 程伟、汪孝宜,JSP网络开发经典模块实现全集,电子工业出版社,北京,200815

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 大学论文

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922