Java基于UDP协议进行网络通信

      最后更新:2022-07-18 10:00:18 手机定位技术交流文章

      序言:UDP协议不创建连接,将发送的数据信息包入数据包并发送出去,逻辑接收信息也以数据包的形式接收。

      UDP是一个基于IP的简单、不可靠的协议。

      UDP的优点: 简单, 轻量.

      UDP的缺点是没有流量控制,没有响应确认机制,没有损失、重复或故障序列的问题可以解决。

      应该指出,并非所有使用UDP协议的应用程序层都是不可靠的,应用程序可以通过增加验证和重传输机制来实现可靠的数据传输,因此UDP协议的最大特征是速度。

      服务器端

      在服务器端上,UDP还需要听指定的端口(端口号通常设置为1024–65535,0–1024通常是计算机系统端口)。Java提供DatagramSocket来实现此功能,代码如下:

      首先创建一个好的听力端口号码

      如果没有其他应用程序占据这个端口,那么监听成功,我们就使用一个无限循环来处理收到的UDP数据包。我们收到什么类型的数据,就需要什么类型的变量来接收。

      2.然后需要准备一个空的数据包,也就是创建 DatagramPacket对象来接收发送过来的数据包,需要在构造方法中传入一个字节数组来存储接收过来的信息

      3.数据由接收(DatagramPacket object)方法存储在DatagramPacket对象中

      4.假设我们收到由Datagram 返回的 String 类型包 Packet.getOffset() 和 packet.getLength() 确定缓冲区数据的起始位置:

      5.在打印完毕时,只需打印出所收到的信息,并向发送者返回数据包

      当服务器接收数据gramPacket时,通常一个或多个UDP包必须立即返回,因为客户地址是数据gramPacket中,每个数据gramPacket收到的可能是一个不同的客户端,如果不回复,客户端不会收到任何UDP包。
      UDP包的发送也通过DatagramPacket实现:

      客户端

      与服务器相比,当客户端使用UDP时,它只发送UDP包直接到服务器,然后接收返回UDP包

      当创建DatagramSocket实例时,客户端不需要指定端口,未使用端口由操作系统自动指定。紧接着,调用setSoTimeout(100)来设置1秒超时,这意味着当UDP包随后收到时,等待时间不得超过一秒。否则,如果未收到UDP包,客户将无限期等待.这与服务器端不同,服务器端可以无限期等待,因为它最初被设计为在生长期间运行。

      请注意,客户端的DatagramSocket还调用Connect()方法来“连接”指定的服务器端。 UDP不是未连接的协议吗?为什么您需要Connect()在这里?

      这个连接()方法不是真正的连接,它旨在在客户端的DatagramSocket实例中存储服务器端的IP和端口号码,确保此DatagramSocket实例只发送UDP包到指定地址和端口,不能发送到其他地址和端口。这不是UDP的限制,相反,Java有内置的安全检查。

      如果客户端想向两个不同的服务器发送UDP包,然后它必须创建两个DatagramSocket实例。随后的输入和输出数据与服务器端一致。通常来说,客户端必须先发送UDP包,因为客户端不发布UDP包,服务器根本不知道客户端的地址和端口号码。

      如客户认为该通讯应终止,你可以调用 disconnect()来切断连接。注: disconnect()不是真正的切断,它简单地清除在客户端Datagram Socket实例中记录的远程服务器地址和端口号码。DatagramSocket实例可以连接到另一个服务器端。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/29977.html

          热门文章

          文章分类