当前位置: 首页 > 图灵资讯 > 技术篇> 使用Java实现数据报通讯过程

使用Java实现数据报通讯过程

来源:图灵教育
时间:2024-02-22 14:38:40

  数据报(Datagram)使网络层数据单元在介质上传输信息的逻辑分组格式,是一种在网络中传播、独立、包含地址信息的信息,无法准确知道是否能到达目的地、到达时间、到达时内容是否会发生变化。它的通信双方都不需要建立联系,对于一些不需要高质量的应用来说,数据报告通信是一个很好的选择。

  Javajava在Java.net包中有两种类型的DatagramSocket和DatagramPacket,用于应用程序中的数据报告和通信。

  下面,我想详细解释如何在Java中实现客户端和服务器之间的数据报告和通信,请参见:

 客户端应用程序的工作流程

  1) 首先要建立数据报通讯的Socket,我们可以通过创建DatagramSocket对象来实现,DatagramSocket类在Java中有以下两种结构方法:  a)public DatagramSocket() 构建数据报告socket,并将其连接到本地主机任的可用端口。如果不能打开socket,则抛出socketexception异常。如果不能打开socket,则抛出socketexception异常。  b) public DatagramSocket(int port) 构建数据报告socket,并将其连接到当地主机指定的端口。如果socket或socket无法与指定端口连接,则抛出socketexception异常。

  2) 创建数据报文包,实现无连接包传输服务。每个数据报文包都是由DatagramPacket创建的,DatagramPacket对象包装了数据报文包数据、包长度、目标地址、目标端口。作为客户端发送数据报文包,需要调用DatagramPacket类以下形式构建DatagramPacket对象,并将要发送的数据和包文目的地址信息放入对象中。  DatagramPacket(byte bufferedarray[],int length,InetAddress address,int port)也就是说,构建一个包长为length的包,将数据报文包传输到指定主机指定的端口号,length必须小于或等于bufferedarry.length  DatagramPacket类提供了四个类别来获取信息  a) public byte[] getData() 回到一个字节数组,数据报中的数据包含收到或发送的数据  b) public int getLength() 返回发送或接收到的数据的长度  c) public InetAddress getAddress() 返回发送或接收此数据报包文本的机器IP地址  d) public int getPort() 返回发送或接收数据报告的远程主机的端口号。

  3)创建DatagramSocket和DatagramPacket对象后,即可发送数据报文包。  3)创建Datagramsocket和Datagrampacket对象后,可以发送数据报文包。发送是通过调用Datagramsocket对象的send来实现的。它需要以Datagrampacket对象为参数,报告刚刚包装在Datagrampacket对象中的数据组成数据。

  4)当然,我们也可以接收数据报文包。为了接收从服务器返回的结果数据报文包,我们需要创建一个新的DatagramPacket对象,这需要DatagramPacket的另一种结构方法(byte bufferedarray[],int length),也就是说,只需指示存储接收到的数据报告的缓冲区和长度。调用datagramsocket对象的receive()方法完成接收数据报告的工作。此时,需要以上创建的datagrampacket对象作为参数。这种方法总是会阻止你知道收到一个数据报告包。此时,datagrampacket的缓冲区包含收到的数据,数据报告包还包含发送者的IP地址,发送机上的端口号等信息。

  5)处理接收缓冲区数据,获取服务结果。  5)处理接收缓冲区数据,获取服务结果。  6)通信完成后,可以使用Datagramsocket对象的close()方法关闭数据并报告通信socket。当然,Java会自动关闭Socket,释放DatagramSocket和DatagramPacket所占用的资源。然而,作为一种良好的编程习惯,它仍然需要显示并关闭。