CHƯƠNG 4 LỚP INETADDRESS
4.1 Khởi tạo đối tượng InetAddress
Lớp InetAddress khơng có một hàm tạo public nào. Thay vào đó, InetAddress có một số phương thức static để kết nối tới máy chủ DNS. Phương
thức thường được dùng nhất là InetAddress.getByName(). Ví dụ, đây là cách để chúng ta tạo một object để lấy thông tin của utb.edu.vn:
InetAddress address = InetAddress.getByName("utb.edu.vn");
Ví dụ 4-1. Tạo một object của lớp InetAddress để đọc thông tin của tên miền
utb.edu.vn.
import java.net.*;
public class InetGetByName {
public static void main (String[] args) { try {
InetAddress address =
InetAddress.getByName("utb.edu.vn"); System.out.println(address);
} catch (UnknownHostException ex) {
System.out.println("Khong tim thay!!!"); } } } Kết quả: % java InetGetByName utb.edu.vn/117.6.86.168
Chúng ta cũng có thể sử dụng tham số là một địa chỉ IP. Ví dụ, lấy hostname tương ứng với địa chỉ IP 117.6.86.168:
InetAddress address = InetAddress.getByName("117.6.86.168"); System.out.println(address.getHostName());
Nếu địa chỉ IP chúng ta tìm khơng có hostname tương ứng, getHostName() sẽ đơn giản trả về địa chỉ IP dạng dotted squad.
Như bên trên đã nói, một số tên miền có thể tương ứng với nhiều địa chỉ IP. Phương thức để lấy thông tin về tất cả các máy chủ tương ứng là getAllByName(). Phương thức này sẽ trả về một mảng thông tin tương ứng với các máy chủ.
try {
InetAddress[] addresses =
InetAddress.getAllByName("google.com.vn"); for (InetAddress address : addresses) {
System.out.println(address); }
} catch (UnknownHostException ex) {
System.out.println("Kh™ng t“m thấy th™ng tin"); }
Cuối cùng, phương thức getLocalHost() trả về thông tin của máy cục bộ
(máy mà đoạn mã Java được thực thi).
InetAddress me = InetAddress.getLocalHost();
Phương thức này sẽ cố gắng kết nối tới một máy chủ DNS để lấy thông tin về hostname và địa chỉ IP. Trong trường hợp không thành cơng nó sẽ trả về địa chỉ loopback. Địa chỉ IP tương ứng với localhost là 127.0.0.1.
Ví dụ 4-2. Viết chương trình hiển thị thơng tin của máy cục bộ.
import java.net.*;
public class MyAddress {
public static void main (String[] args) { try {
InetAddress address = InetAddress.getLocalHost(); System.out.println(address);
} catch (UnknownHostException ex) {
System.out.println("Kh™ng t“m thấy!!!"); }
} }
Đây là kết quả trên máy tính của tơi. Trên máy của bạn sẽ là một kết quả khác. % java MyAddress
Nguyens-MacBook-Pro.local/10.211.55.2
Như thấy ở kết quả trên, chúng ta có thể thấy hostname/IP của máy tính chạy chương trình. Nếu khơng kết nối tới Internet và không đặt địa chỉ IP tĩnh cho máy tính của mình, chúng ta sẽ nhận được kết quả hostname là localhost và địa chỉ IP là
127.0.0.1.
Nếu biết chính xác địa chỉ IP của máy tính, chúng ta có thể tạo một
InetAddress sử dụng phương thức InetAddress.getByAddress(). Phương thức
này có thể chứa một hoặc 2 tham số.
public static InetAddress getByAddress(byte[] addr) throws UnknownHostException
public static InetAddress getByAddress(String hostname, byte[] addr) throws UnknownHostException
Phương thức InetAddress.getByAddress() thứ nhất tạo một InetAddress với một địa chỉ IP cho trước mà không cần tham số là hostname trong khi đó phương thức thứ hai thì cần tham số này. Ví dụ sau sẽ tạo một InetAddress cho địa chỉ
117.6.86.168:
byte[] address = {117, 6, 86, (byte) 168};
InetAddress tbit = InetAddress.getByAddress(address);
Chú ý rằng giá trị lớn hơn 127 phải chuyển thành kiểu byte.
Không giống với các phương thức khác, hai phương thức này không đảm bảo máy chủ đó tồn tại hoặc máy chủ đó được ánh xạ tới địa chỉ IP. Việc bẫy lỗi sẽ
throws lớp UnknownHostException nếu kích thước byte khơng phù hợp (khơng
phải là 4 byte hoặc 16 byte). Phương thức này sẽ hữu dụng nếu thông tin tên của Server khơng có sẵn hoặc khơng đúng. Ví dụ, khi khơng thể nhớ được tên của một máy trạm, một máy in mạng hay một router trong hệ thống mạng nội bộ của mình có địa chỉ IP là bao nhiêu, chúng ta có thể viết một chương trình nhỏ để kiểm tra các máy đang bật trong hệ thống mạng của mình và chỉ phải quét 254 trường hợp để tìm ra thiết bị đó.