收藏 分享(赏)

基于java数据报的远程信息传递模式.doc

上传人:cjc2202537 文档编号:196302 上传时间:2018-03-23 格式:DOC 页数:12 大小:45KB
下载 相关 举报
基于java数据报的远程信息传递模式.doc_第1页
第1页 / 共12页
基于java数据报的远程信息传递模式.doc_第2页
第2页 / 共12页
基于java数据报的远程信息传递模式.doc_第3页
第3页 / 共12页
基于java数据报的远程信息传递模式.doc_第4页
第4页 / 共12页
基于java数据报的远程信息传递模式.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、基于 Java 数据报的远程信息传递模式薹篓羹三 l网络纵横妒留妨鹭迢朱蓉(嘉兴学院信息工程学院,嘉兴 314001)摘要:介绍了 UDP 用户数据报协议的运行原理.利用 Java 语言提供的DatagramSocket 类与 DatagramPacket类,给出了数据报双向传输中发送和接收的流程,并用实例实现了在客户机/Jltt 务器机制下的信息传递过程.基于 Javatt-ll-ttt远程信 .Ili,传递模式的建立将有效简化繁琐的网络通信.为网络上不同计算机之间的实时信息交流提供良好的理论依据.关键词:用户数据报协议;远程信息传递;Java 语言;客户 t,/Jit.务器机制引言网络技术

2、的发展推动了 Internet 的普及.越来越多的用户在网络上互通信息,这种不受地域限制的交流方法称为远程信息传递模式.目前,网络上计算机进行信息传递大多采用客户机 IJl务器机制.即通过两个独立运行在不同计算机上的应用程序实现信息传递和资源共享,其中,服务器是运行在一端计算机上的应用程序,用于向客户机提供信息;客户机是运行在另一端计算机上的应用程序.用于向服务器发出服务请求并使用来自服务器的信息.1UDP 用户数据报协议原理TCP/IP 是网络上不同计算机问进行信息传递的标准约定,它是一组协议群,其中,TCP 传输控制协议和 UDP 用户数据报协议是实现远程信息传递的关键部分.TCP 是面向

3、连接的通信协议,当两台计算机之问需要进行信息传递时,首先建立起一条稳定的连接通道,位于两端的计算机利用这条通道来回传递信息.UDP 是面向无连接的通信协议.当两台计算机之间需要进行信息传递时,位于两端的计算机将信息以数据报包的形式进行传递.数据报包是规定了大小的报文.包含了需要传递的信息和可用地址.可见,TCP的运行原理与打电话类似,一条信息流通通道的建立保证了发送信息和接收信息在内容和次序上的一致.实现的是可靠的信息传递;UDP 的运行原理与寄信件类似,寄信人在信封上写明接收方地址和发送方地MODERNCOMPUTER2oo5.6址,至于接收方是否能收到信件.多封信件收到的次序是否与发送的次

4、序相同等都难以保证.实现的是不可靠的信息传递.TCP 由于能得到安全 ,可靠的信息传递效果曾一度被广泛使用,然而,随着越来越多实时性要求较高的需求出现,如:涉及多媒体信息传递的视频会议,网络教育,网际游戏等,UDP 所具有的信息传递效率高 ,节省系统开支等优点显示其强大的威力,这也是本文采用 UDP 用户数据报方式实现远程信息传递的原因.2JaVa 中 UDP 数据报的使用Java 语言是一种广为流行的网络编程语言.其具有的面向对象,平台独立,线程机制等特点适合在网络环境下开发应用程序,Java 提供的与网络中信息传递有关的类大多放在 Java.NET 包中.(1)DatagramSocket

5、 类与 DatagramPacket 类DatagramSocket 类用于实现数据报的发送和接收.其构造方法为:DatagramSocket()throwsSocketException创建数据报套接字.并将其绑定在本地计算机的任何可用端口上(1 一 l024 为系统保留端口号,不可用),若数据报套接字不能被创建或不能与端口联系时抛出异常 SocketException.DatagramSocket(intport)throwsSocketException创建数据报套接字,并将其绑定在本地计算机的指定端口上,若数据报套接字不能被创建或不能与端口联系时抛出异常 SocketException

6、.在采用客户机/月臣务器机制的远程信息传递模式中.无论是服务器端还是客户机端都需要建立一个DatagramSocket 对象,用来发送和接收数据报.DatagramPacket 类用于表示数据报包.每个数据报包中都存放着重要的数据和地址信息,其构造方法为:DatagramPacket(bytebuf【】 ,intlength)建立用于接收信息的数据报包.其中.buf 为接收信息的数据报包缓冲区;length 为接收信息的长度.DatagramPacket(bytebuf【】 ,intlength,InetAddressaddress,intport)建立用于发送信息的数据报包.其中,buf 为

7、发送信息的数据报包缓冲区;length 为发送信息的长度;address 为接收方 IP 地址;port 为接收方端口号.(2)UDP 数据报发送与接收过程在 Java 中.UDP 数据报的发送与接收是通过DatagramSocket 类中的 receive()方法和 send()方法实现的:publicvoidreceive(DatagramPacketP)throwsIOException从数据报套接字接收数据报包,数据报包中存放发送方的 IP 地址和端口号.当发生 IO 错误时抛出异常 IOException.publicvoidsend(DatagramPacketP)throwsIO

8、Exception从数据报套接字发送数据报包.数据报包中存放发送信息的说明及长度,接收方的 IP 地址和端口号 .当发生 10 错误时抛出异常 IOExceptionUDP 数据报发送过程步骤:在指定端口创建 DatagramSocket 数据报套接字对象.建立 DatagramPacket 数据报对象.给出发送数据报包存放的内容.利用 DatagramSocket 对象的 send()方法,以DatagramPacket 对象为参数发送信息.UDP 数据报接收过程步骤:在指定端口创建 DatagramSocket 数据报套接字对象.建立 DatagramPacket 数据报对象,给出接收数据

9、报包存放的内容.溺络纵横利用 DatagramSocket 对象的 receive()方法,以DatagramPacket 对象为参数接收信息.(3)基于 UDP 数据报的远程信息传递模式在这种模式中.服务器端与客户机端均不用建立连接.以发送和接收数据报包方式进行信息传递.服务器端首先创建数据报套接字,建立客户机请求数据报包的缓冲区.等待来自客户机的服务请求,当接收到请求时获取发送方即客户机的 IP 地址和端口号 .并将数据报包发送给客户机.客户机端通过建立数据报套接字向服务器发送服务请求.并接收来自服务器端的数据报包.具体模式如图 1 所示.创建数据报套接字DataramSocketf建立接

10、收数据报接收数据报包 receive(,阻塞,等待 l 客户机请求建立发送数据报发送回应信息 send(1关闭数据报套接字 close(,创建数据报套接字Data2ramSocketf1建立发送数据报发送数据报包 5%d(,建立接收数据报接收回应信息 receive(,关闭数据报套接字 close(,图 1 基于 UDP 数据报的远程信息传递模式3 远程信息传递模式实现下面通过一个模拟传真功能的实例来实现远程信息传递模式.在本例中,服务器为打印服务器.一直运行并在指定端口上等待来自客户机的打印请求,当接收到信息时,向发出打印请求的客户机回应确认信息;客户机向指定了 IP 地址或主机名的服务器发

11、送打印请求,并等待接收来自打印服务器的确认信息.(1)服务器端程序impojava.io.:publicclassUDPServerpublicstaticvoidmain(Stringargs【】)throws1OException个线程newU.DPServerThread().start();/“i收到来自客户机的服务请求时,马上启动一MODERNCOMPUTER.6 固现代计算机总第二_=一期现代计算机总第二_三期一网络纵横importjava.io.;.:publicclassUDPseerThreadextendsThreadDatagramSocketsocket=null;/初

12、始化数据报套接字BufferedReaderin=null;,初始化标准输入流对象Stringstr=-null;/初始化字符串对象UDPServerThread()throwsSocketExceptionsocket=newDatagramSocket(7980);,创建指定端口号的数据报套接字publicvoid13.in()tryfbyte【】bur=newbyte5l2;/创建缓冲区DatagramPacketpacket=newDatagramPacketbuf,buf.1ength);/建立接收数据报socket.receivelacket);/接收数据报System.out.p

13、rinfln(“请向客户机回应信息 “);in-.newBufferedReader(newInputStreamReader(Syem.in);str=-in.readLine();/从标准输入设备输入读入信息buf=str.getBytes();/,将字符串转化为相应的字节数组,以便发送InetAddressaddress=packet.getAddress();/获取客户机的 IP 地址intport=packet.getPort();/获取客户机的端口号packet=newDatagramPacket(buf,buf.1ength,address,port);socket.send(p

14、acket);/向客户机发送回应信息packet=newDatagramPacket(buf,buf.1ength);,/建立接收数据报socket.receive(packet);/接收来自客户机的信息str=-newString(packet.tDam();/将接收到的字节数组转化为相应的字符串Syemoutprinfln(“接收来自客户机发送的信息为:“+str);catch(10Exceptione)etoString();socketclose();oMODERNCOMPUTER2005.6,关闭数据报套接字(2)客户机端程序importjava.io.;.;publicclassU

15、DPClientpublicstaticvoidmain(String【args)throwsIOException,SocketExceptionif(args.1ength!:1)System.out.println(“请给出服务器主机名:“);return;DatagramSocketsocket=newDatagramSocket();/创建数据报套接字byte【】buf=newbyte5121;,/创建缓冲区BufferedReaderin=null;/初始化标准输入流对象Strings-null;/初始化字符串对象InetAddressaddress=InetAddress.get

16、ByName(args0);,/由服务器主机名得到 IP 地址for(inti=O;i512;i+)buli=0;/缓冲区清空DatagramPacketpacket=newDatagramPacket(buf,buf.1ength,address,7980);建立发送数据报socket.send(1:lacket);,向服务器发送数据报包packet=newDatagramPacket(buf,buf.1ength);,建立接收数据报socket.receiveIacket);,接收来自服务器的回应信息str=-newString(packet.getData();/将接收到的字节数组转化为

17、相应的字符串System.out.println(“接收到由服务器回应的信息:“+str);for(inti-O;i5l2;i+)buiIi】=0;/缓冲区清空System.out.println(“请向服务器发送信息:“);in=newBufferedReaderfnewInputStreamReader(System.in);sLy-newString(in.readLine();/从标准输入设备输入读入信息buf=str.getBytes();,将字符串转化为相应的字节数组,以便发送packet=newDatagramPacket(buf,buf.1ength,address,7980);/建立发送数据报socket.send(packet);/向服务器发送信息socket.close();/关闭数据报套接一 f(3)程序执行结果为得到信息传递效果,只要在命令窗口中先执行

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报