《计算机网络课程设计--UDP编程.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计--UDP编程.docx(8页珍藏版)》请在第一文库网上搜索。
1、计算机网络课程设计报告题目UDP编程一、问题描述(把你所选的题目及要求说一下)(1)目的:实现UDP(USerDataPrOtoCOI)编程,包括发送和接受UDP报文。(2)技术要求:1、J.DatagramScoket类和J.DatagrmPacket类可以实现UDP编程,前者实现与目标主机的连接(这种连接不需要目标主机的认可),后者用于封装UDP包。2、发送UDP包时,先将数据包装成DatagramPacket对象,然后建立一个DatagramScoket,调用它的send方法,将DatagramPacket发送给目标主机。3、接受UDP包时,建立一个侦听本地端口的DatagramSCok
2、e3创建一个空的DatagramPacket对象,以存放收到的报文,调用DatagramScoket的receive方法将收到的UDP包写入到DatagramPacket对象中。4、DatagramPacket的getAddress方法能获得UDP消息发送者的网络地址信息。二、概要设计(抽象数据类型定义)在包中提供了网络编程所用到的类,其中InetAddreSS类提供将主机名解析为其IP地址(或反之)的方法InetAddress,在给定主机名的情况下确定主机的IP地址Pub1icstaticInetAddressgetByName(Stringhost),获取主机IPpub1icssaticI
3、netAddressget1oca1Host(),获取当前IP地址的主机名pub1icStringgetHostName(),获取当前IP地址的IP地址字符串pub1icStringgetHostAddress()。三、详细设计(主要算法和函数间的调用关系)UDP技术流程:简单UDP流程图图形化界面:发送方:接收方:(1)娄争辉U)回区对方P:192,1681.109简单的编程UDP发送端:98IOOIO1102103104105106107108109I1O11111211311411511611711811912012112212312412512612712812913013113213
4、3pub1icUDPSend1(Stringa.,StringbzStringc)89this.argsO=a;this.args1=b;this.args2=c;if(args2.substring(O,2).equa1s(m-f,)94args3=args2.Siibstring(2fargs2.1ength()-1);args2=,-f,*;97try(/检查参数个数if(args.1ength3)thrownewI11ega1ArguinentException(,Wrongnumberofargs*);/域名和端口Stringhost=args0;intport=Integer.pa
5、rse1nt(args1);/下面构造待发送报文的字节数组bytemessage;if(args2.equa1s(w-f*)/如果第三个参数为-,则表示将文件的内容以UDP方式发送/获得待发送的文件对象以及文件的长度Fi1ef=newFi1e(args3);intIen=(int)f.1ength();/创建一个足够容纳文件内容的字节数组message=newbyte1en;Fi1eInputStreamin=newFi1eInputStream(f);/将文件内容以字节的方式读到字节数组中intbytes_read=0,n;n=in.read(message,bytes_read,1en-b
6、ytes_read);bytes_read+=n;whi1e(bytes_read1en)&(n!=-1);e1se/如果第三个参数不是F则将后面的参数当作消息发送Stringmsg=args2;for(inti=3;iargs.1ength;i+)msg+=+argsi;message=msg.getBytes();(2)简单的UDP编程接收端:pub1icc1assUDPReceiveextendsJFrame/帮助信息42 try(if(args.1ength!=1)thrownewI11ega1ArgumentException(Wrongntimberofargs);45 46 /从
7、命令行中获取端口号参数48 intport=Integer.parse1nt(args0);49 /创建1ssocket,侦听这个端口。51 DatagramSocketdsocket=newDatagramSocket(port);52 /保存接收到的UDP报文的字节数组54 bytebuffer=newbyte2048;55 /创建一个DatagramPaCket,将收到的报文写入buffer中./注意,这里指定了报文的长度,如果收到的UDP报文比2048大,多余的信息被舍弃DatagramPacketpacket=newDatagramPacket(buffer,buffer.1engt
8、h);58S9/不断循环,接收数据for(;)(61/等待收到一个数据包63 dsocket.receive(packet);64 /将收到的报文的字节数组封装成字符串UStringmsg=newstring(buffer,0,packet.get1ength();/从数据包中取得消息来源的地址jtf.setText(packet.getAddress().getHostAddress();jta.setText(msg);System.out.print1n(Receive:+packet.getAddress().getHostAddress()+msg);四、调试分析(调式过程中出现的问
9、题及如何改正)程序在编写的时候也出现了许多的问题。比如:(1)界面图标的监听无法响应。解决方法:设置事件源,监听对象,处理时的方法(2)一些类没有引入包,导致无法运行解决方法:查文档引入相应的包(3)输入的数据不符合要求。只能按照要求输入(4)主函数参数的输入错误。输入数据时要认真五、心得体会(组内成员的分工及实习期间的体会)分工:大家一起进行负责程序的编写与调试,负责写报告书。具体分工:李争辉主要负责代码编写、纠错。刘东帅主要负责界面处理和分析代码。夏远全主要负责文档整理和分析代码。体会:通过这次课程设计我们学到了很多,不但让我们更加深刻了解课本知识,也得以往对知识的疏忽得以补充。在网络编程
10、中任何一个小错误都会带来失败。因此,我们决不能马虎编程。以往对网络有一定的偏见认为不太重要,原来网络编程也是我们编程人员必备技巧编程离不开网络知识。同时也使我们学会了成员之间要相互合作与协调,才能使工作更有效率,更有成效。通过课程设计也使我们了解到一些实际与理论之间的差异。通过课程设计不仅可以巩固专业知识,为以后的工作打下了坚实的基础,而其还可以培养和熟练使用资料,运用工具书的能力,把我们所学的课本知识与实践结合起来,起到温故而知新的作用。课程设计给了我们很多专业知识以及专业技能上的提升。同时我们也发现自己有许多不足的地方,还有许多东西待我们去学习。总之,这次课程设计使我们收获很多、学会很多、比以往更有耐心。六、用户手册(系统的使用方法介绍)该程序要在java运行环境下运行。首先要配置环境,完成以后可以在DOS窗口或ec1ipse下运行