黑马程序员技术交流社区

标题: tcp和udp中的构造函数 [打印本页]

作者: 杜佳瑞    时间: 2012-8-13 23:59
标题: tcp和udp中的构造函数
本帖最后由 杜佳瑞 于 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的构造函数中同样的参数为什么就不要求是对象呢?这有什么不为人知的地方呢?




作者: 杜佳瑞    时间: 2012-8-14 09:52
为什么没人关注呢?:(
作者: 梁志仲    时间: 2012-8-14 12:22
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参数的。
作者: 杜佳瑞    时间: 2012-8-14 12:59
梁志仲 发表于 2012-8-14 12:22
DatagramPacket(byte[] buf, int length, InetAddress address, int port)  
Socket(InetAddress address,  ...

哦,原来如此,光纠结这个构造函数了,没看下面的,谢谢了,已解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2