网络编程:DatagramSocket和DatagramPacket

一、DatagramSocket:
        1.基本介绍:    
      DatagramSocket 是 Java 中的一个类,用于在网络应用程序中实现无连接的数据传输。它通常用于发送和接收数据报包(UDP协议)。
        2.数据完整性:由于UDP不保证消息传递的可靠性,所以需要在用户应用程序中实现传输可靠性。
        3.处理额外空格:在网络发送过程中,byte数组的大小问题可能导致包含多余的空格,接收数据时应先处理这些额外的空格。
        4.广播设置:新建的DatagramSocket可能会默认启用SO_BROADCAST套接字选项以允许广 播数据传输。为了收到广播包,应将DatagramSocket绑定到通配符地址。
        5.资源释放:使用完DatagramSocket后,需要调用close()方法来释放资源。
        6.超时设置:可以通过setSoTimeout(int timeout)方法设置超时时间,单位为毫秒。
构造方法选择:根据需要选择合适的构造方法创建DatagramSocket实例,例如,可以创建一个未绑定的DatagramSocket或绑定到特定端口和地址的DatagramSocket。
        7.数据操作:使用receive(DatagramPacket dp)方法接收数据,使用send(DatagramPacket dp)方法发送数据。
        8.协议特性:了解UDP的特点,如没有流控制、应答确认机制,不能解决丢包、重发、错序问题,适用于对实时性要求高的应用,如流媒体、语音交流等。
        9.地址和端口管理:在使用DatagramSocket时,要注意管理好目标地址和端口号,确保数据能够正确发送和接收。
        10.异常处理:由于UDP是不可靠的,所以在编程时要做好异常处理,比如处理丢失的数据包或者错误的情况。

二、DatagramPacket:
       1.基本介绍:
       DatagramPacket 是 Java 中用于实现基于 UDP 协议的网络通信的一个重要类。它代表了一个数据报,用于在网络中发送或接收数据。
       2.数据封装:DatagramPacket类似于运输中的“集装箱”,用于封装发送端或接收端的数据。创建DatagramPacket对象时,需要指定目标设备的IP地址、端口号以及要发送的数据(byte数组)。
        3.与DatagramSocket配合使用:DatagramPacket通常与DatagramSocket一起使用,以实现基于UDP协议的网络通信。DatagramSocket负责建立套接字并发送或接收数据报。
        4.UDP协议特性:由于DatagramPacket基于UDP协议,它是不可靠的。这意味着发送方不保证数据是否成功送达,接收方收到数据也不会向发送方反馈确认信息,因此可能导致数据丢失。
        5.动态端口分配:在发送数据包时,系统会自动分配一个动态端口号作为发送端口,该端口号也是接收端口号。这意味着可以从该端口接收数据包。
        6.处理丢包和错误:由于UDP不保证数据传输的可靠性,所以在应用程序中需要实现额外的机制来处理丢包、重发和错序问题。
       7.性能和效率:UDP协议简单、轻量,适用于对实时性要求较高的应用,如在线游戏、流媒体等。但这也意味着可能需要在应用层处理更多的网络问题。
       8.资源释放:使用完DatagramPacket后,应及时释放相关资源,以避免内存泄漏。
       9.异常处理:在使用DatagramPacket进行网络通信时,应妥善处理可能出现的异常情况,如网络中断、数据格式错误等。

三、如何解决客户端想要发送给多个服务端的问题?
         1.通过创建两个DatagramSocket实例,用connect连接到不同的服务器
         2.不使用connect方法连接服务器,而是在在创建DatagramPacket包的时候指定服务器。

四、 connect方法指定服务器和在创建DatagramPacket包的时候指定服务器。哪一个的优先级高?
        1.connect的优先级更高
        2.当我们使用connect方法建立了连接,该套接字就只会从该指定的远程地址发送或接收数据包。
        3.如果在创建DatagramPacket时指定了目标地址,但是没有对DatagramSocket调用connect方法,则DatagramSocket会保留其无连接的特性,即可以接收任何地址发送来的数据包。
 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值