java点滴之InetAddress类和InetSocketAddress的使用

来源:互联网 发布:linux内核培训 编辑:程序博客网 时间:2024/04/28 09:54

一简介

InetAddress是Java对IP地址的封装,代表互联网协议(IP)地址;
InetAddress对象的获取只能通过静态方法,比如根据主机名获取主机的ip地址封装对象:
?
1
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
2
3
4
5
6
InetAddress address = InetAddress.getLocalHost();
System.out.println("主机名:"+ address.getHostName() +", ip地址:"
        + address.getHostAddress());
InetAddress add = InetAddress.getByName("BOPZKQZ9SSY5ECY");
System.out.println(add.getHostAddress());



?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
final Socket socket = new Socket();
SocketAddress address =newInetSocketAddress("www.fortify.net",443);
try {
    socket.connect(address);
} catch(IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}// 连接远程主机
Thread reader = new Thread() {
    @Override
    publicvoidrun() {
        try {
            byte[] buffer = new byte[512];
            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地址+端口号”来区分不同的服务的。

 

 
 
1
 
0 0
原创粉丝点击