java中关于Socket的知识

在Java语言中,可以通过以下代码来接收UDP报文

String host="111.111.111.111";
int port=1111;
DatagramSocket socket=new DatagramSocket(null);
socket.bind(new InetSocketAddress(host,port));

while(true){
DatagramPacket incoming=new DatagramPacket(new byte[1024],1024);
socket.receive(p);
...
}



1、之前本人一直误以为:如果在socket.receive(p)这句代码执行之前,客户端给服务器发送了报文,那么服务器端是无法接收到该报文的,只有socket.receive(p)执行期间,客户端给服务器端发送报文,服务器端才能接收得到。

今天经过写代码验证,以上观点都是错误的。只要Socket绑定了地址,无论socket是否正在接收数据(即socket.receive(p)),服务器端都是能接收到客户端发送过来的报文的,此时报文应该已经存放在操作系统缓冲池(专业术语应该不是这么叫。。。)中。当socket执行接收方法(即socket.receive(p);),socket即可从缓冲池中取得该数据。至于缓冲池中的数据有没有失效时间,本人没有进行验证。

2、之前一直有个疑问:当代码处于上述代码中的while(true){...}代码块中时,如果此时将socket所绑定的网卡禁用,此时socket执行receive方法或者执行send方法时是否会抛异常?实践证明,不会。禁用网卡的事件对代码没有任何的影响。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值