java之InetAddress类和InetSocketAddress的使用

举报
chenyu 发表于 2021/07/26 23:12:24 2021/07/26
【摘要】 一、简介 InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址; InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象: InetAddress add=InetAddress.getByName("BOPZKQZ9SSY5ECY"); 主机名:BOPZKQZ9SSXXXXX, ip地址:1XX.1X...

一、简介

InetAddress是Java对IP地址的封装,代表互联网协议(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

二、主要功能方法


  
  1. InetAddress address = InetAddress.getLocalHost();
  2. System.out.println("主机名:" + address.getHostName() + ", ip地址:"
  3. + address.getHostAddress());
  4. InetAddress add = InetAddress.getByName("BOPZKQZ9SSY5ECY");
  5. System.out.println(add.getHostAddress());


  
  1. final Socket socket = new Socket();
  2. SocketAddress address = new InetSocketAddress("www.fortify.net", 443);
  3. try {
  4. socket.connect(address);
  5. } catch (IOException e) {
  6. // TODO Auto-generated catch block
  7. e.printStackTrace();
  8. }// 连接远程主机
  9. Thread reader = new Thread() {
  10. @Override
  11. public void run() {
  12. try {
  13. byte[] buffer = new byte[512];
  14. InputStream stream = socket.getInputStream();
  15. socket.getInputStream().read(buffer);
  16. } catch (Exception ex) {
  17. }
  18. }
  19. };
  20. reader.start();

三 、两者区别

关键就是InetSocketAddress不基于任何协议,一般用于socket 编程 中。
表面看InetSocketAddress多了一个端口号,端口的作用:一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过 1 个IP地址来实现。
那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。

实际上是通过“IP地址+端口号”来区分不同的服务的。

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/52336238

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。