UDP协议通信简单代码分析

来源:互联网 发布:淘宝信用贷款在哪里查 编辑:程序博客网 时间:2024/06/10 04:26

UDP:面向无连接的协议,用户的数据报文包协议。

Java中使用UDP协议进行网络编程,需要2个对象:

1,DatagramSocket:代表的是两个通信的端口(可以看做运送货物大两个码头,港口);API中对DatagramSocket其定义:用来表示 发送和接收数据报包的套接字。

在这个类中有两个构造函数DatagramSocket():创建一个基于UDP协议的发送端或者接收端端点,但是这个端点没有绑定在固定的端口上,一般用于创建UDP协议的发送端端点对象。

DatagramSocket(int port):创建一个基于UDP协议的发送端或者接收端端点,这个端点会绑定到指定的port上,一般用于创建UDP接收端端点对象。针对这两个构造函数,下文会代码演示到

其中有两个函数:receive(DatagramPacket p),send(DatagramPacket p) 简单地说就是发送数据和接受数据的方法,针对函数中参数,下面就会提到

2,DatagramPacket:它是负责对发送的数据或者接受的数据进行包装或者拆包装。生活上,港口码头上的货物运送之前或者运送靠岸之后必须进行包装和拆包装的操作,程序的思想上在对数据进行发送和接受之后也需要对数据进行包装和拆包装,我们使用DatagramSocket对象可以发送或者接收数据,但是发送和接收的时候需要提供专门用来打包或者拆包的对象。DatagramPacket对象它是专门用来对发送的数据进行打包,或者对接收到的数据进行拆包。

区分DatagramPacket到底是打包还是拆包对象,需要通过它的构造方法区分:

构造方法中只要需要地址参数的都是用来创建发送的DatagramPacket对象,不需要地址的是用来创建拆包对象的。

DatagramPacket(byte[] buf,int length) 构造DatagraPacket,用来接收长度为length的数据包;

DatagramPacket(byte[]buf int length,InetAddress address,int port)

为了看的明白,下面演示UDP发送端和接收端简单代码实现

有一个方法,笔者需要提一下,当初笔者在理解该点知识时候煞是费力

String ip = dp.getAddress().getHostAddress();

DatagramPacket类的getAddress()方法为什么可以调用InetAddres类的方法呢?一者,DatagramPacket类和InetAddres类无继承关系;二者为什么可以用一个方法去调用另外一个HostAdress()方法呢?查阅API之后才恍然大悟:原因如下:

1)DatagramPacket类中的getAddress方法的返回值类型为InetAddress对象,当然可以用该类对象的去访问该类中的成员函数了!

2)InetAddress类无构造函数,并且getHostAddress()方法不是静态的,就排除了用类名去直接访问的可能了!实际上用一个类的方法去访问另外一个类的访问在开发中是很多的,称为链式开发

0 0