ImageVerifierCode 换一换
格式:DOC , 页数:14 ,大小:87.54KB ,
资源ID:4000136      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4000136.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(计算机网络课程设计利用java实现UDP协议.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

计算机网络课程设计利用java实现UDP协议.doc

1、 计算机网络课程设计 利用java 实现UDP协议 系 别 计算机与通信工程学院 专 业 计算机科学与技术 学 号 4110415 姓 名 张振 指导教师 王聪 2014年7月4日 1. 需求分析 程序是如何通过网络进行相互通信的呢?各个孤立的工作站或主机用物理链路相连在一起,组成数据链路,从而达到资源共享和通信的目的,就形成网络。通信是人与人之间同过某种媒体进行的信息交流与传递.网络通信一般指网络协议。当今网络协议有很多,其中基本最常用的就是TCP/IP 协议族。UDP协议就是属于TCP/IP协议族中的协议。在网络中它与TCP协议一样用于

2、处理数据包.在OSI模型中,UDP协议在第四层——传输层,处于IP协议的上一层。与TCP相比,UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的. 本文利用Java语言网络编程的思想,编写UDP协议程序,实现UDP协议在网络中所要完成的功能。在Java语言为实现程序的相互通信提供了许多有用的抽象应用程序接口(API, Application Programming Interface),这类应用程序接口被称为套接字(sockets). 因此,本文UDP协议的编程所需要用到的接口就是套接字. 2. 实验环境 开发环境:

3、个人PC+win8。1+myeclipse 10 3. 实验原理以及相关内容 3。1 UDP简介 UDP 是User Datagram Protocol的简称,中文全称是用户数据包协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务.在网络中它与TCP协议一样用于处理数据包。在OSI模型中,UDP协议在第四层——传输层,处于IP协议的上一层.与TCP相比,UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的

4、网络应用都需要使用UDP协议。 3。2 使用UDP原因 UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。这是因为UDP 有以下特点: (1)UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 (2)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。 (3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小

5、 (4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。 (5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。 (6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。 3.3 UDP套接字 UDP协议提供了一种不同于TCP协议的端到端服务.实际上UDP协议只实现两个功能: (1).在IP协议的基础上添加了另一层地址(端口); (2).对数据传输过程中

6、可能产生的数据错误进行了检测,并抛弃已经损坏的数据。 由于其简单性,UDP套接字具有一些与我们之前所看到的TCP套接字不同的特征.例如,UDP套接字在使用前不需要进行连接。TCP协议与电话通信相似,而UDP协议则与邮件通信相似:你寄包裹或信件时不需要进行“连接”,但是你得为每个包裹和信件指定目的地址。类似的,每条信息(即数据报文,datagram)负载了自己的地址信息,并与其他信息相互独立.在接收信息时,UDP套接字扮演的角色就像是一个信箱,从不同地址发送来的信件和包裹都可以放到里面。一旦被创建,UDP套接字就可以用来连续地向不同的地址发送信息,或从任何地址接收信息。 UDP套接字与TCP

7、套接字的另一个不同点在于他们对信息边界的处理方式不同:UDP套接字将保留边界信息。这个特性使应用程序在接受信息时,从某些方面来说比使用TCP套接字更简单。最后一个不同点是,UDP协议所提供的端到端传输服务是尽力而为(best—effort)的,即UDP套接字将尽可能地传送信息,但并不保证信息一定能成功到达目的地址,而且信息到达的顺序与其发送顺序不一定一致(就像通过邮政部门寄信一样)。因此,使用了UDP套接字的程序必须准备好处理信息的丢失和重排. 4. 实验内容 4.1 流程图 UDP应用程序原理图 UDP应用程序流程图 4.2 实例解析 3。3.1 UDP服务器端 UDP服务器要

8、执行以下三步: (1).创建一个DatagramSocket实例,指定本地端口号,并可以选择指定本地地址。此时,服务器已经准备好从任何客户端接收数据报文。 (2).使用DatagramSocket类的receive()方法老接收一个DatagramPacket实例。当receive() 方法返回时,数据报文就包含了客户端的地址与端口,这样我们就知道回复信息该发送到什么地方。 (3)。使用DatagramSocket类的send()和receive()方法发送和接收DatagramPacket实例,进行通信。 //服务器类UDPServerBean。java pa

9、ckage UDP; import java。io.*; import java。net.*; public class UDPServerBean { private DatagramSocket dSocket; private int ClientPort; private int ServerPort; private InetAddress ServerIP; private InetAddress ClientIP; private String content; // 无参构造函数 public UDPServerBean() thro

10、ws SocketException,UnknownHostException { ClientPort = 1111; ServerPort = 1001; content = ""; ClientIP = InetAddress。getLocalHost(); ServerIP = InetAddress.getLocalHost(); dSocket = new DatagramSocket(ServerPort); } // 信息发送函数,将接收到的信息发回给用户 public void sendToClient() throws I

11、OException{ byte[] Buffer = ("服务器已经收到:\n ”+content)。getBytes(); // 将要发送的信息给Buffer变量 DatagramPacket dPacket = new DatagramPacket(Buffer,Buffer.length,getClientIP(),getClientPort()); //创建DatagramPacket对象dPacket,并设置客户机的IP地址与端口号 dSocket.send(dPacket); //发送信息 }

12、 // 以下全是UDPServerBean类的各个成员变量的get和set方法 public InetAddress getServerIP() { return ServerIP; } public void setServerIP(InetAddress serverIP) throws Exception { ServerIP = serverIP; } public DatagramSocket getdSocket() { return dSocket; } public void setdSocket(DatagramSocke

13、t dSocket) { this。dSocket = dSocket; } public int getClientPort() { return ClientPort; } public void setClientPort(int clientPort) { ClientPort = clientPort; } public int getServerPort() { return ServerPort; } public void setServerPort(int serverPort) throws SocketExcepti

14、on { ServerPort = serverPort; } public String getContent() { return content; } public void setContent(String content) { this。content = content; } public InetAddress getClientIP() { return ClientIP; } public void setClientrIP(InetAddress clientIP) { ClientIP = clientIP;

15、 } } //服务器端代码,UDPServer。java package UDP; import java.awt。*; import java。awt。event.*; import java.io。*; import java。net。*; import javax.swing。*; public class UDPServer extends JApplet{ private UDPServerBean server; private Thread thread; private JTextField jtf_ServerPort = new JText

16、Field(10); private JButton jbt_Strat = new JButton(”启动”); private JButton jbt_Exit= new JButton(”退出"); private JTextArea jta_Server = new JTextArea(); public UDPServer() { JPanel jplServer11 = new JPanel(); jplServer11.add(new JLabel(”服务器端口:”)); jplServer11.add(jtf_ServerPort); J

17、Panel jplServer21= new JPanel(); jplServer21.add(jbt_Strat); jplServer21。add(jbt_Exit); JPanel jplServer0= new JPanel(); jplServer0。setLayout(new GridLayout(2,1)); jplServer0。add(jplServer11,BorderLayout.NORTH); jplServer0。add(jplServer21); add(jplServer0,BorderLayout.NORTH);

18、 add(new JScrollPane(jta_Server),BorderLayout.CENTER); // 使用线程 thread = new Thread(new Runnable(){ public void run() { receiveForemClient(); //调用发送函数 } }); //启动按钮事件 jbt_Strat。addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {

19、 int serPort = Integer。parseInt(jtf_ServerPort。getText()); // 从jtf_ServerPort文本区中取服务器的端口号 try { server = new UDPServerBean(); //创建服务器UDPServerBean的类对象 server.setServerPort(serPort); //将取得的服务器端口serPort给server对象 jta_Server。setText("设置服务器端口为 ”+jtf_ServerPort。getText()+”

20、服务器开启。。。\n"); // 将服务器端设置好的信息显示在jta_Server文本域中 thread.start(); //启动线程 } catch (SocketException e2) { e2。printStackTrace(); }catch (UnknownHostException e1) { e1。printStackTrace(); } catch (Exception e1) { e1.printStackTrace(); } } });

21、 // 退出按钮的触发事件 jbt_Exit。addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System。exit(0); } }); } // 接收客户端的信息,并将接收到的信息发回给客户机 public void receiveForemClient(){ String rec_str = null; byte[] Buffer = new byte [1024]; try { s

22、erver。setdSocket(new DatagramSocket(server.getServerPort(),server.getServerIP())); // server对象调用setdSocket()函数,创建新Socket对象(此时服务器端口号为设定的端口号) } catch (SocketException e) { e。printStackTrace(); } DatagramPacket dPacket = new DatagramPacket(Buffer,Buffer.length); //创建DatagramPack

23、et对象dPacket while(true){ // 用循环监听信息接收 try { server.getdSocket().receive(dPacket); //接受信息,将接收到的信息存放在dPacket对象中 rec_str = new String(dPacket.getData(),0,dPacket.getLength()); //取出dPacket对象中接收到的信息 server。setClientPort(dPacket。getPort()); // 将dPacket对象中包含的客户机的端口号

24、给server对象 server.setClientrIP(dPacket。getAddress()); // 将dPacket对象中包含的客户机的IP给server对象 server。setContent(rec_str); // 将接收的信息给server对象 jta_Server.setText(jta_Server.getText()+"收到IP地址为 "+server.getClientIP()+",端口为 "+server.getClientPort()+” 的客户机的信息有:\n ”+rec_str+

25、"\n"); // 将客户机的信息与接收的信息显示在jta_Server文本域中 server。sendToClient(); //将信息发送回去 } catch (IOException e) { e。printStackTrace(); } } } } UDP客户端 UDP客户端首先向被动等待联系的服务器端发送一个数据报文。一个典型的UDP客户端主要执行以下三步: (1)。创建一个DatagramSocket实例,可以选择对本地地址和端口号进行设置。 (2)。使用DatagramSocket类的 send()和

26、receive()方法来发送和接收DatagramPacket实例,进行通信。 (3)。通信完成后,使用DatagramSocket类的close()方法来销毁该套接字。 // 客户端类 UDPClientBean。java package UDP; import java。io。*; import 。*; class UDPClientBean{ private DatagramSocket dSocket; private int ServerPort; private int ClientPort; private InetAddress Server

27、IP; private InetAddress ClientIP; private String content; //无参构造函数 public UDPClientBean() throws SocketException,UnknownHostException { ServerPort = 1001; ClientPort =1111; content = ””; ClientIP = InetAddress。getLocalHost(); ServerIP = InetAddress.getLocalHost(); dSocket

28、 new DatagramSocket(ClientPort); } // 信息发送函数 public void sendToServer() throws IOException{ byte[] Buffer = getContent()。getBytes(); //将要发送的信息给Buffer变量 DatagramPacket dPacket = new DatagramPacket(Buffer,Buffer.length,getServerIP(),getServerPort()); // 创建DatagramPacket对

29、象dPacket,并指定要发送对象的服务器的IP地址与端口号 dSocket。send(dPacket); // dSocket对象调用send函数发送信息 setContent(""); } // 信息接收函数 public String receiveFromServer() throws IOException{ byte[] buffer = new byte[1024]; DatagramPacket dPacket = new DatagramPacket(buffer,buffer.length); // 创建DatagramP

30、acket对象dPacket dSocket.receive(dPacket); // dSocket对象调用receive函数接收信息 String receive_str = new String(dPacket.getData(),0,dPacket.getLength()); return receive_str; // 返回接收到的信息 } // 下面都是UDPClientBean类的各个成员变量的get和set方法 public DatagramSocket getdSocket() { return dSocket; } pub

31、lic void setdSocket(DatagramSocket dSocket) { this.dSocket = dSocket; } public int getServerPort() { return ServerPort; } public void setServerPort(int serverPort) { ServerPort = serverPort; } public String getContent() { return content; } public void setContent(String co

32、ntent) { this。content = content; } public InetAddress getServerIP() { return ServerIP; } public void setServerIP(InetAddress serverIP) { ServerIP = serverIP; } public int getClientPort() { return ClientPort; } public void setClientPort(int clientPort) { ClientPort = cl

33、ientPort; } public InetAddress getClientIP() { return ClientIP; } public void setClientIP(InetAddress clientIP) { ClientIP = clientIP; } } // 客户端代码,UDPClient.java package UDP; import java.awt.*; import java。awt.event.*; import java.io.*; import java。net。*; import javax。swing.

34、*; public class UDPClient extends JApplet { private String content; private UDPClientBean client; private JTextField jtf_ServerIP = new JTextField(10); private JTextField jtf_ServerPort = new JTextField(10); private JTextField jtf_ClientPort = new JTextField(10); private JButton jbt_Set

35、 new JButton("设置"); private JTextArea jta_ClientShow = new JTextArea(); private JTextArea jta_ClientInput = new JTextArea(); private JButton jbt_Send= new JButton(”发送”); private JButton jbt_Exit= new JButton("退出”); public UDPClient(){ JPanel jplClient11 = new JPanel(); jplClient11。s

36、etLayout(new GridLayout(3,2)); jplClient11。add(new JLabel(”客户端端口:")); jplClient11.add(jtf_ClientPort); jplClient11.add(new JLabel(”服务器地址:”)); jplClient11.add(jtf_ServerIP); jplClient11.add(new JLabel("服务器端口:")); jplClient11.add(jtf_ServerPort); JPanel jplClient10= new JPanel();

37、 jplClient10。add(jplClient11); jplClient10。add(jbt_Set); JPanel jplClient21 = new JPanel(); jplClient21.add(jbt_Send); jplClient21.add(jbt_Exit); JPanel jplClient31 = new JPanel(); jplClient31.setLayout(new GridLayout(2,1)); jplClient31.add(new JScrollPane(jta_ClientShow));

38、 jplClient31.add(new JScrollPane(jta_ClientInput)); add(jplClient10,BorderLayout。NORTH); add(jplClient31,BorderLayout.CENTER); add(jplClient21,BorderLayout.SOUTH); // 设置按钮触发事件 jbt_Set。addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { try

39、 { client = new UDPClientBean(); //创建UDPClientBean对象 int cliPort = Integer.parseInt(jtf_ClientPort.getText()); //将客户机端口从jtf_ServerPort文本域中取出 client.setClientPort(cliPort); //将取出的cliPort给client对象的ClientPort成员变量 String serIP = jtf_ServerIP.getText(); // 将服务器IP从jtf_

40、ServerIP文本域中取出 int serPort = Integer。parseInt(jtf_ServerPort.getText()); //将服务器端口从jtf_ServerPort文本域中取出 client.setdSocket(new DatagramSocket(client。getClientPort(),client。getClientIP())); // client对象调用setdSocket()函数,创建新Socket对象(此时客户机端口号为设定的端口号) client.setServerIP(InetAdd

41、ress.getByName(serIP)); //将取出的serIP给client对象的ServerIP成员变量 client.setServerPort(serPort); //将取出的serPort给client对象的ServerPort成员变量 jta_ClientShow.setText(”将信息发送到IP为 "+jtf_ServerIP。getText()+” 端口为 ”+jtf_ServerPort.getText()+" 的服务器上。\n"); // 将信息发送的对象的服务器的信息显示在jta_ClientShow

42、区域中 } catch (SocketException e2) { e2。printStackTrace(); } catch (UnknownHostException e1) { e1。printStackTrace(); }catch (Exception e1) { e1。printStackTrace(); } } }); // 发送按钮触发事件 jbt_Send。addActionListener(new ActionListener(){ public

43、void actionPerformed(ActionEvent e) { client。setContent(””); content = jta_ClientInput。getText(); //取jta_ClientInput文本区域中要发送的信息 client.setContent(content); //将取出的信息给client对对象的content成员变量 jta_ClientShow。setText(jta_ClientShow.getText()+"客户机发送:"+content+”\n"); // 将要发送的信息

44、显示在jta_ClientShow区域框中 jta_ClientInput。setText(null); //将jta_ClientInput文本区域置空 String receive_str = null; try { client.sendToServer(); // client对象调用信息发送函数 } catch (IOException e1) { jta_ClientShow.setText(jta_ClientShow.getText()+”数据发送失败\n”); e1.printStackTra

45、ce(); } try { receive_str = client。receiveFromServer(); // client对象调用信息接收函数,并将结果返回给receive_str变量 jta_ClientShow。setText(jta_ClientShow.getText()+receive_str+”\n"); // 将收到的信息显示在jta_ClientShow区域框中 } catch (IOException e1) { jta_ClientShow.se

46、tText(jta_ClientShow。getText()+”数据接收失败\n”); e1。printStackTrace(); } } }); // 退出按钮触发事件 jbt_Exit。addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { client。getdSocket()。close(); System.exit(0); } }); } } 5. 实验结果与分析 运

47、行3。2。1中服务器端代码与3。2.2中的客户端代码,可以得到下面的结果: (1)。 在服务器端,设置服务器的端口,启动服务器;当客户机有信息发过来的时候,服务器就可以监听到; (2). 在客户端,设置客户端的端口号,并指定将要发送信息的服务器端的IP地址与端口号;在下面的文本框中输入要发送的信息. 6. 实验总结 在经过相应的课程如《计算机网络》《计算机网络编程》《操作系统》等课程的系统学习之后,可以说对计算机网络已经是耳目能熟了,所有的有关计算机网络的基础知识、基本理论、基本方法和结构体系,我都基本掌握了,但这些似乎只是纸上谈兵,倘若将这些理论性极强的东西搬上实际上应用,那我想我肯定会是无从下手,一窍不通.自认为已经掌握了一定的计算机网络理论知识在这里只能成为空谈。于是在坚信“实践是检验真理的唯一标准”下,认为只有把从书本上学到的理论应用于实际的网络设计操作中去,才能真正掌握这门知识。 7. 参考文献 [1]《计算机网络实验指导》。张建忠。清华大学出版社 [2]《计算机网络》。谢希仁.电子工业出版社 [3] 杜佳荣,马建红,腾振宇.Java网络编程技术与实践[M]。北京:清华大学出版社,2008

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服