UDP-DattagramSocket构造方法的真实作用

之前对DatagramSocket的构造方法DatagramSocket(int port,InetAddress laddr)是何意思一直不太清楚。第一个参数port是指定本地端口,但laddr是什么意思呢?

今天查了点资料终于明白

DatagramSocket(int port,InetAddress laddr):创建数据报套接字,将其绑定到指定的本地地址。即指定网卡发送和接收数据。如果在创建DatagramSocket对象时,没有指定网卡的IP地址,在发送数据时,底层驱动程序会自动旋转一块网卡去发送,在接收数据时,会接收索引的网卡收到的与端口一致的数据。

在网上很多程序中我看到常常这样调用上面的构造方法.

DatagramSocket udpSocket=DatagramSocket(9090,InetAddress.getLocalHost());

而需要说明的是,使用getLocalHost方法未必真的能够获取您想要的本机的IP地址(有人说,在windows上getLocalHost可以正确执行,获取到本机的IPV4地址,而在Linux上调用getLocalHost返回的是一个127.0.0.1的ip地址)。现在假想有一台主机有多张网卡,而且有多个IP地址,甚至这台主机即配置了IPV4又配置了IPV6,调用getLocalHost将会返回哪一个IP地址?很明显getLocalHost只能返回一个IP地址,因此就限定了getLocalHost方法并不是获取本机IP地址的最好方式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值