A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜佳瑞 中级黑马   /  2012-8-13 23:59  /  1262 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜佳瑞 于 2012-8-14 00:04 编辑

DatagramSocket(byte[] buf, int length, InetAddress address, int port)  
Socket(InetAddress address, int port)                                                                  
这两个都是API中的构造函数,在看视频的时候我发现个问题:这两个构造函数中参数InetAddress address完全不一样,在视频UDP的实例中创建数据包对象的构造函数只能是InetAddress.getByName("122.71.182.13")。
而在TCP实例中创建端点对象的构造参数中参数InetAddress address既可以是InetAddress.getByName("122.71.182.13")又可以是"122.71.182.13"和主机名。这个我已经在两个实例中验证了,在UDP创建数据包时候用IP地址和主机名做参数就会编译失败。
这是什么原因呢?如果说InetAddress.getByName("122.71.182.13")是IP对象的话,那Socket的构造函数中同样的参数为什么就不要求是对象呢?这有什么不为人知的地方呢?



评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
为什么没人关注呢?:(
回复 使用道具 举报
DatagramPacket(byte[] buf, int length, InetAddress address, int port)  
Socket(InetAddress address, int port)  
这两个构造函数的InetAddress参数应该是一样的,都是InetAddress对象。
getByName(String host)方法中,参数是主机名的字符串形式,InetAddress.getByName("122.71.182.13")中的122.71.182.13正好既是主机名,又是IP地址。
Socket类除了有Socket(InetAddress address, int port) 构造方法外,还有Socket(String host, int port)
因此,你可以看到Socket构造方法中的参数既可以是InetAddress.getByName("122.71.182.13")又可以是"122.71.182.13"和主机名。而DatagramPacket的构造方法是没有String host参数的。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
梁志仲 发表于 2012-8-14 12:22
DatagramPacket(byte[] buf, int length, InetAddress address, int port)  
Socket(InetAddress address,  ...

哦,原来如此,光纠结这个构造函数了,没看下面的,谢谢了,已解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马