使用UDP进行程序设计的一般过程如下:
(1)接收端准备一个空的数据包,用来准备保存接收的数据。
(2)接收端监听某个端口是否有数据输入。
(3)接收端使用receive()方法等待接收数据。
(4)发送端准备要发送的数据包,并在数据包中写入接收端的IP地址和端口号。
(5)发送端使用send()方法发送数据,并在数据发送完毕之后释放资源。
(6)接收端收到数据并进行处理,在处理完毕之后释放资源。
UDP交互过程如图13.11所示。
【例13.5】编写一个简单的UDP程序,实现发送端向接收端发送数据。
在项目Chapter13的src目录下新建一个名为cn.pzhu.udp的包,在这个包下面创建一个名为Receiver的类,并在类中编写接收端程序,关键代码如下:
图13.11 UDP通信交互过程
程序编写完毕之后,运行程序,运行结果如图13.12所示。
图13.12 接收端运行结果(www.daowen.com)
提示:
在UDP通信的时候,需要先运行接收端程序,才能避免发送端发送的数据因为找不到接收端而造成丢失。
从图13.12可以看出,程序一直处于阻塞状态,这是因为DatagramSocket的receive()方法在运行的时候,如果没有接收到数据将一直等待,直到收到发送端发送数据。
下面,开始编写发送端程序。在cn.pzhu.udp包下创建一个名为Sender的类,并在类中编写发送端程序,关键代码如下:
编写之后,程序运行结果如图13.13所示。
图13.13 发送端运行结果
发送端在创建DatagramSocket时,如果不指定端口,程序将自动分配一个未被占用的端口;但是在创建DatagramPacket的时候,端口号必须要与接收端监听的端口号一致,接收端才能收到数据。
当发送端使用send()方法将数据发送出去之后,接收端会收到发送端发送的数据,并且结束阻塞状态,此时接收端控制台的显示结果如图13.14所示。
图13.14 接收端接收数据之后的运行结果
提示:
运行结果中显示的端口号"58223"是因为在创建DatagramSocket的时候没有指定端口号,因此,在程序运行中,系统将随机分配的一个端口号来发送数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。