关于DatagramSocket中connet()方法和getInetAddress()方法返回null的说明
2015-04-12 13:11
246 查看
大家都知道UDP协议是面向无连接的,但是用于UDP的DatagramSocket类中却有connet()方法,实在令人费解。刚才有学生问起来,研究了下才发现这个方法的真正用法!connet()方法共有两个重载的方法,这两个方法的本质是一样的,SocketAddress其实是吧InnetAddress和port封装在一起。这个里面的地址是指的将来要发送的远端地址,也就是你准备使用send方法把数据报包发送到的地址。public void connect(InetAddressaddress, int port)
public void connect(SocketAddress addr)
如果你在创建过DatagramSocket套件字之后调用了connet方法中的任何一个,则以后使用此套件字发送数据报包,只能发给这一个地址,不能发给另外的地址。也行会有人提出疑问:在发送数据报包(DatagramPacket)的时候,我们需要指明对方的地址呀,那么数据报包中的地址与connet方法中的地址有什么关系?其实这才是关键地方:如果你调用了connet方法,则要发送的数据报包中的地址必须与connet中的地址保证一致,否则会抛出异常:java.lang.IllegalArgumentException:connected address and packet address differ。可能有人会说,这样的设计有点变态呀,connet调用了之后,DatagramPacket中也要指定地址,确实有点变态!!!而实际上,如果你调用了connet方法之后,在发送信息的时候DatagramPacket中完全不需要指明地址也照样可以发送到connet中的地址和端口中。没错,就这么简单!!!在DatagramSocket中有个getInnetAddress()和getPort()方法,调用的时候发现是null和-1,问题也在这里。如果你调用了connet()方法,那么这两个方法的返回值就是connet中的地址和端口。你以前从来没有调用过connet()方法,所以才返回null和-1。
本文出自 “李振超” 博客,请务必保留此出处http://zhenchao125.blog.51cto.com/8241616/1631476
public void connect(SocketAddress addr)
如果你在创建过DatagramSocket套件字之后调用了connet方法中的任何一个,则以后使用此套件字发送数据报包,只能发给这一个地址,不能发给另外的地址。也行会有人提出疑问:在发送数据报包(DatagramPacket)的时候,我们需要指明对方的地址呀,那么数据报包中的地址与connet方法中的地址有什么关系?其实这才是关键地方:如果你调用了connet方法,则要发送的数据报包中的地址必须与connet中的地址保证一致,否则会抛出异常:java.lang.IllegalArgumentException:connected address and packet address differ。可能有人会说,这样的设计有点变态呀,connet调用了之后,DatagramPacket中也要指定地址,确实有点变态!!!而实际上,如果你调用了connet方法之后,在发送信息的时候DatagramPacket中完全不需要指明地址也照样可以发送到connet中的地址和端口中。没错,就这么简单!!!在DatagramSocket中有个getInnetAddress()和getPort()方法,调用的时候发现是null和-1,问题也在这里。如果你调用了connet()方法,那么这两个方法的返回值就是connet中的地址和端口。你以前从来没有调用过connet()方法,所以才返回null和-1。
本文出自 “李振超” 博客,请务必保留此出处http://zhenchao125.blog.51cto.com/8241616/1631476
相关文章推荐
- 关于Java中数据报套接字DatagramSocket中connet()方法说明
- 【2011/3/2】(1)关于readLine()方法,readLine方法是BufferedReader类的方法,此方法是对字符进行操作的类,如果到达流末尾,则返回null,
- 关于在Fragment中getActivity与getApplicationContext等方法返回null的问题
- 关于POI中sheet.getRow方法返回值为null的问题 (NullPointException)
- 关于GestureDetector的onFling方法e1返回null问题
- 关于onActivtyResult方法的data形参返回null或未被调用的问题
- 关于zeo作品中生成代码使用方法的说明!
- 关于Hibernate使用组合主键时,组合主键中有些字段为null时的解决方法
- BitmapFactory.decodeResource()方法在版本26返回null问题
- 关于“幽灵架构”的补充说明1:协议中的方法定义
- Type.GetType()反射另外项目中的类时返回null的解决方法
- PHP处理Json字符串解码返回NULL的解决方法
- Type.GetType()在跨程序集反射时返回null的解决方法
- DatagramSocket.receive()方法无响应的解决
- 执行Fragment的getActivity()方法返回null
- Recyclerview的getChildAt(position)方法获取可见第一条的view返回null;
- 关于android的getActionBar()老返回null。或者相关问题
- 关于Linux socket通讯中send,recv函数的一个说明
- 扩展方法where方法查询不到数据,不会抛异常,也不是返回的null
- 关于ios8以上原生推送不执行返回deviceToken方法的解决