在Java中实现UDP协议编程

来源:互联网 发布:动态域名解析软件 编辑:程序博客网 时间:2024/05/21 07:29
 

在Java中实现UDP协议编程

一、     什么是UDP协议?

1、UDP(User Datagram Protocol)协议是用户数据报,在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。

2、UDP是一种无连接的协议,每个数据都是一个独立的信息,包括完整的源或目的地址,到达目的地的时间以及内容的正确性都是不能被保证的。

二、为什么要使用UDP?

      在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以能常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

三、在Java中操纵UDP

      使用位于JDK中Java.net包下的DatagramSocket和DatagramPacket类,可以非常方便地控制用户数据报文。

1、          DatagramSocket类:创建接收和发送UDP的Socket实例

a)       DatagramSocket():创建实例。通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。

b)      DatagramSocket(int port):创建实例,并固定监听Port端口的报文。

c)       DatagramSocket(int port, InetAddress localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自LocalAddr的报文。

(注意:在创建DatagramSocket类实例时,如果端口已经被使用,会产生一个SocketException的异常抛出,并导致程序非法终止,这个异常应该注意捕获。)

d)      receive(DatagramPacket d):接收数据报文到d 中。Receive方法产生一个“阻塞”(“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。)

e)       send(DatagramPacket d):发送报文d到目的地。

f)        close():关闭DatagramSocket。在应用程序退出的时候,通常会主动释放资源,关闭Socket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。

2、          DatagramPacket:用于处理报文,将byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成byte数组。

a)       DatagramPacket(byte[] buf, int length, InetAddress addr, int port):从buf数组中,取出length长的数据创建数据包对象,目标是addr地址,port端口。

b)      DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):从buf数组中,取出offset开始的、length长的数据创建数据包对象,目标是addr地址,port端口。

c)       DatagramPcket(byte[] buf, int offset, int length):将数据包中从offset开始、length长的数据装进buf数组。

d)      DatagramPacket(byte[] buf, int length):将数据包中length长的数据装进buf数组。

e)       getDate():它从实例中取得报文的byte数组编码。

三、ServerSocket:编写TCP网络服务程序,首先要用到java.net.ServerSocket类用以创建服务器Socket

      1、构造方法:

           a) ServerSocket(int port): 创建绑定到特定端口的服务器套接字。

           b) ServerSocket(int port, int backlog):利用指定的backlog(服务器忙时保持连接请求的等待客户数量),创建服务器套接字并将其绑定到指定的本地端口号。

           c) ServerSocket(int port, int backlog, InetAddess bindAddr):使用指定的端口、侦听backlog和要绑定到的本地IP地址创建服务器。

四、Socket:客户端要与服务器建立连接,必须先创建一个Socket对象。

      1、常用构造方法

           a) Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。

           b)Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定IP地址的指定端口号。

(服务器端程序调用ServerSocket类中的accept()方法等待客户端的连接请求,一旦accept()接收了客户端连接请求,该方法返回一个与该客户端建立了专线连接的Socket对象,不用程序去创建这个Socket对象。建立了连接的两个Socket是以IO流的方式进行数据交换的, Java提供了Socket类中的getInputStream()返回Socket的输入流对象,getOutputStream()返回Socket的输出流对象。)

 

 

原创粉丝点击