Giống như những lớp khác trong Java, java.net.InetAddress kế thừa từ lớp
java.lang.Object. Vì vậy, lớp này cũng kế thừa tất cả các phương thức của lớp này. Lớp InetAddress override ba phương thức sau:
• public boolean equals(Object o)
• public int hashCode()
• public String toString()
Hai object của lớp InetAddress bằng nhau nếu chúng có cùng địa chỉ IP. Ví dụ, một object InetAddress cho tbit.vn sẽ bằng với một object cho tuhoctin.net vì cả hai tên miền này đều được trỏ về địa chỉ một địa chỉ IP. Ví dụ 4-7 sẽ tạo các object tương ứng với hai tên miền này và sẽ cho chúng ta biết chúng cùng một địa chỉ IP nếu không có gì thay đổi.
Ví dụ 4-7. Kiểm tra tbit.vn và tuhoctin.net có cùng địa chỉ IP không?
import java.net.*;
public class IBiblioAliases {
public static void main(String args[]) { try {
InetAddress ibiblio = InetAddress.getByName("tbit.vn"); InetAddress helios = InetAddress.getByName("tuhoctin.net"); if (ibiblio.equals(helios)) {
} else {
System.out.println("tbit.vn không thuộc cùng máy chủ với tuhoctin.net");
}
} catch (UnknownHostException ex) {
System.out.println("Không tìm thấy host tương ứng."); }
} }
Kết quả chạy đoạn code trên tại thời điểm viết tài liệu này:
% java IBiblioAliases
tbit.vn thuộc cùng máy chủ với tuhoctin.net
Phương thức hashcode() trả về một số nguyên tương ứng với địa chỉ IP. Nếu hai object InetAddress cùng địa chỉ IP, chúng sẽ cùng mã hash code, mặc dù hostname có thể khác nhau.
Phương thức toString() trả về một đoạn văn bản ngắn mô tả object. Ví dụ 4- 1 và Ví dụ 4-2 đã thực hiện gọi phương thức này. Kết quả trả về của nó dạng:
hostname/địa chỉ IP
Không phải tất cả object InetAddress đều có hostname. Nếu chúng không có hostname, địa chỉ IP sẽ được dùng thay thế trong phiên bản Java 1.3 trở về trước, còn đối với Java 1.4 trở về sau nó sẽ trả về một xâu rỗng.
4.8 Inet4Address và Inet6Address
Java sử dụng hai lớp Inet4Address và Inet6Address để phân biệt địa chỉ IPv4 và địa chỉ IPv6.
• public final class Inet4Address extends InetAddress
• public final class Inet6Address extends InetAddress
Hầu hết mọi khi, chúng ta không thực sự nên quan tâm tới địa chỉ IPv4 hay IPv6. Trong tầng ứng dụng, chúng ta không cần phải biết về điều đó. Nhưng cũng có nhiều khi chúng ta cần chúng để làm mọi việc nhanh hơn. Lớp Inet4Address
override nhiều phương thức của lớp InetAddress không thay đổi tới các phương thức public. Lớp Inet6Address cũng tương tự nhưng nó thêm một phương thức không có trong lớp cha:
public boolean isIPv4CompatibleAddress()
Phương thức này trả về giá trị đúng nếu và chỉ nếu đó là một địa chỉ IPv4 có thể nằm trong một IPv6, có nghĩa là chỉ có 4 byte cuối là khác không. Do đó, địa chỉ IP sẽ có dạng 0:0:0:0:0:0:0:xxxx. Trong trường hợp này chúng ta cũng có thể tách
lấy bốn byte cuối cùng từ phương thức getBytes() để tạo ra một object
Inet4Address. Tuy nhiên chúng ta hiếm khi thực hiện điều này.