InetAddress类和InetSocketAddress的使用有啥区别
InetAddress是Java对IP地址的封装public class InetAddressextends Objectimplements Serializable
此类表示互联网协议 (IP) 地址。
InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象:InetAddress add=InetAddress.getByName("BOPZKQZ9SSY5ECY");主机名:BOPZKQZ9SSXXXXX, ip地址:1XX.1XX.2XX.210
InetSocketAddress是SocketAddress的实现子类。此类实现 IP 套接字地址(IP 地址 + 端口号),不依赖任何协议。在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中的connect方法并未提供这种方式,而是使用SocketAddress类来向connect方法传递服务器的IP和端口。SocketAddress只是个抽象类,它除了有一个默认的构造方法外,其它的方法都是abstract的,因此,我们必须使用SocketAddress的子类来建立SocketAddress对象,也就是唯一的子类InetSocketAddress
【InetAddress类和InetSocketAddress的使用有啥区别】 二主要功能方法InetAddress address = InetAddress.getLocalHost();System.out.println("主机名:" + address.getHostName() + ", ip地址:" + address.getHostAddress());InetAddress add = InetAddress.getByName("BOPZKQZ9SSY5ECY");System.out.println(add.getHostAddress());
final Socket socket = new Socket();SocketAddress address = new InetSocketAddress("www.fortify.net", 443);try { socket.connect(address);} catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace();}// 连接远程主机Thread reader = new Thread() { @Override public void run() { try { byte buffer = new byte; InputStream stream = socket.getInputStream(); socket.getInputStream().read(buffer); } catch (Exception ex) { } }};reader.start();
三两者区别关键就是InetSocketAddress不基于任何协议,一般用于socket编程中。表面看InetSocketAddress多了一个端口号,端口的作用:一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的。
推荐阅读
- 大猩猩再过几百万年还会不会进化成人类
- 趣头条|汽车燃油宝到底有没有用?其实它的分类和用法很复杂,没那么简单
- 本人软件工程系学生,想找一款适合的机械键盘用于编程,预算300元以下,另外想了解机械键盘的具体种类和作用?
- OSPF 1类和2类是用SPF算法 区域间路由计算3类LSA是用距离矢量算法对吗
- 盈袖兰香|学会童装安全标准,1秒区分童装A类、B类和C类
- 文档向量直接通过距离聚类和通过LSI降维后再聚类效果会有咋样的差异
- 理论上人类和黑猩猩能否生育出后代类似骡子
- 同样探讨人类和信息化的关系,《黑客帝国》和《数码宝贝》的区别在哪里
- 油盐肉过多,奶类和新鲜水果太少,浙江中小学生午餐调查结果来了?
- [送给]常见兰花的种类和养护方法分享,送给刚刚入兰门的朋友们!