Khởi tạo đối tượng InetAddress

Một phần của tài liệu Giáo trình lập trình mạng (Trang 63 - 65)

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ị đó.

Một phần của tài liệu Giáo trình lập trình mạng (Trang 63 - 65)

Tải bản đầy đủ (PDF)

(114 trang)