InetAddress类是Java对IP地址的封装,代表IP地址。
InetAddress类的对象只能通过静态方法,比如根据主机名获取主机的IP地址封装对象。
代码实现:
1.InetAddress add = InetAddress.getByName("主机名"); //通过主机名来获取主机的IP地址
System.out.println("IP地址:"+add.getHostAddress());
2.InetAddress address = InetAddress.getLocalHost();
System.out.println("主机名"+address.getHostName()+"IP地址"+address.getHostAddress());
主机名可以通过DNS解析获得IP地址.
InetSocketAddress类:使用Socket来连接服务器时最简单的方式就是直接使用IP地址和端口号,但是Socket类中的connect()并未提供这种方式,而是使用SocketAddress类来向connect方法来传递服务器的IP地址和端口。SocketAddress只是个抽象类,它除了有一个默认的构造方法以外,其他的方法都是abstract,因此,我们必须使SocketAddress的子类来建立SocketAddress的对象,也就是InetSocketAddress。代码实现:
final Socket socket = new Socket();
SocketAddress address = new InetSocketAddress("主机名","端口号");
try{
socket.connect(address);
}catch(IOException e){
e.printStackTrace();
}
Thread reader = new Thread(){
public void run(){
try{
byte[] buffer = new byte[512];
InputStream stream = socket.getInputStream();
stream.read(buffer);
}catch(Exception ex){
e.printStackTrace();
}
}
}.start();
关键就是InetSocketAddress不基于任何协议,一般用于Socket编程。
InetSocketAddress多了一个端口号,用来区分同一主机上的不同服务。