六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 21|回复: 0

java中关于Socket的知识

[复制链接]

升级  8.67%

15

主题

15

主题

15

主题

秀才

Rank: 2

积分
63
 楼主| 发表于 2013-2-3 10:37:37 | 显示全部楼层 |阅读模式
在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方法时是否会抛异常?实践证明,不会。禁用网卡的事件对代码没有任何的影响。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表