理论教育 Java程序设计-DatagramSocket类详解

Java程序设计-DatagramSocket类详解

时间:2023-10-18 理论教育 版权反馈
【摘要】:DatagramPacket可以将发送端或者接收端的数据封装起来,就像货运公司在运送货物的时候,需要将数据放入“集装箱”一样。在创建接收端的DatagramSocket对象时,必须指定端口号,该端口号表示接收端的数据监听端口。表13.9DatagramSocket的常用方法提示:receive()方法在接收到数据之前会一直处于阻塞状态,只有当接收到数据包后才会返回。

Java程序设计-DatagramSocket类详解

DatagramPacket可以将发送端或者接收端的数据封装起来,就像货运公司在运送货物的时候,需要将数据放入“集装箱”一样。但是在运输货物的时候,不仅需要“集装箱”,还需要有运送货物的“码头”。同理,要实现通信,除了需要DatagramPacket类,还需要 java.net 包下的DatagramSocket类来充当“码头”的角色,使用DatagramSocket类就可以实现数据包的发送和接收,数据的发送过程示意图如图13.9所示。

与DatagramPacket对象类似,在创建DatagramSocket对象的时候,也需要根据发送端和接收端的不同,应选择不同的构造方法。

图13.9 数据发送示意图

1.DatagramSocket()

该构造方法用于创建发送端的DatagramSocket对象,在创建DatagramSocket对象时,因为没有指定端口号,此时系统会分配一个没有被其他网络程序所使用的端口号。

2.DatagramSocket(int port)

该构造方法既可用于创建接收端的DatagramSocket对象,也可以创建发送端的DatagramSocket对象。在创建接收端的DatagramSocket对象时,必须指定端口号,该端口号表示接收端的数据监听端口。

DatagramSocket类还提供了用于发送和接收DatagramPacket数据报的方法,这些常用方法如表13.9所示。

表13.9 DatagramSocket的常用方法

提示:(www.daowen.com)

receive()方法在接收到数据之前会一直处于阻塞状态,只有当接收到数据包后才会返回。

下面是一个简单的接收端示例:

提示:

getData()方法得到的是缓冲区中所有的内容,由于得到的数据可能不到1024个字节(自定义的最大容量),因此在输出的时候使用new String(dp.getData(), 0, dp.getLength())方法来取0~getLength()部分的数据。

下面是一个简单的发送端示例:

提示:

发送端数据包中的端口号需要和接收端监听的端口号一致,如示例中的端口“8888”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈