




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络课程设计报告专业班级: 姓 名: 学 号: 指导教师: 2012年 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地址为“01”,端口号为“2345”。如果客户端有到服务器端的连接,则在客户端会显示连接信息,信息中包括客户端的IP地址。由于这里是在同一台主机上,则这里将显示相应的客户端IP地址,但前提是服务器端不是以“01”为地址启动,而是相应的服务器端所在主机的IP地址或者主机名为地址来启动。启动服务器端后,以正确的服务器端IP地址和端口号启动客户端,这时将在客户端显示连接信息,并显示来自服务器端的相应=A。而服务器端的连接信息则显示IP地址,端口号及即等于 A。 带选项启动服务器:服务器端也可以以指定选项的方式启动, 2.2程序:Server:package niuchunlu;import java.io.BufferedReader;import java.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(服务器正常启动);while(true) Socket connectionSocket = welcomeSocket.accept();BufferedReader inFromClient =new BufferedReader(newInputStreamReader(connectionSocket.getInputStream();DataOutputStream outToClient =new DataOutputStream(connectionSocket.getOutputStream();clientSentence = inFromClient.readLine();capitalizedSentence = 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 String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in); Socket clientSocket = new Socket(, 2345); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream(); BufferedReader inFromServer = new BufferedReader(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是无连接的传输协议,主要用于支持在较可靠的链路上的数据传输,或用于对延迟较敏感的应用。实现简单,资源占用少,实时性强,适用于可靠性高的网络和延迟敏感的应用。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 .InetAddress;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)Socket 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);/ 发送回执消息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!=null)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 .UnknownHostException;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(68,2000);/ 指定发送消息的Socket对象,dout=new DataOutputStream(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 (IOException 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.系统任务描述:客户端可以向服务器查询日期。(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错误调试:程序: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 static 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对象得到客户端IPSystem.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) / TODO 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-generated 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 .UnknownHostException;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(2,2222);/ 指定发送消息的Socket对象,/dout=new ObjectOutputStream(sc.getOutputStream();/指定流对象对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-generated 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 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;五、心得经过两个星期的课程设计,过程曲折可谓一言难尽,从开始时满富激情到最后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届河南省新乡市重点初中高二化学第一学期期中考试模拟试题含解析
- Unit4课时2SectionA(Pronunciation2a-2e)(教学设计)英语人教版2024八年级上册
- 机械加工基础知识培训
- 网商运营面试题目及答案
- 新解读《GB-T 36601-2018电子商务交易产品信息描述 玩具》
- 思品面试题目及答案
- 数据集团面试题目及答案
- 食堂厨师面试题目及答案
- 生态理论面试题目及答案
- 化妆品法规知识培训课件
- 漫画行业分析报告
- JC-T 507-2022 建筑装饰用水磨石
- 甲醇安全知识培训
- (对外)出租车驾驶员安全行车常识培训课件
- 《房产交易税费计算》课件
- 高效时间管理-提升个人工作效率的方案
- 2023年地质矿产勘测行业技能鉴定考试-地勘钻探工考考试历年高频核心考点选编附答案
- 初中1600个必背单词带英标
- 科技特派员服务规范
- 基础医学专业就业前景分析
- 红墩界煤矿矿井水综合利用排水管线建设项目环境影响报告
评论
0/150
提交评论