Tạo đối tượng InetAddress trong Java


81

Tôi đang cố gắng chuyển đổi địa chỉ được chỉ định bởi số IP hoặc tên, cả trong Chuỗi (tức là localhosthoặc 127.0.0.1), thành một đối tượng InetAdress . Không có hàm tạo mà là các phương thức tĩnh trả về InetAddress . Vì vậy, nếu tôi nhận được tên máy chủ thì đó không phải là vấn đề, nhưng nếu tôi nhận được số IP thì sao? Có một phương thức nhận byte [] nhưng tôi không chắc cách đó có thể giúp tôi. Tất cả các phương thức khác đều có tên máy chủ.

Tài liệu API InetAddress

Câu trả lời:


133

Bạn sẽ có thể sử dụng getByName hoặc getByAddress .

Tên máy chủ có thể là một tên máy, chẳng hạn như "java.sun.com" hoặc một văn bản đại diện cho địa chỉ IP của nó

InetAddress addr = InetAddress.getByName("127.0.0.1");

Phương thức lấy một mảng byte có thể được sử dụng như sau:

byte[] ipAddr = new byte[]{127, 0, 0, 1};
InetAddress addr = InetAddress.getByAddress(ipAddr);

3
Bạn sẽ làm gì, khi bạn có số lớn hơn 127? Ví dụ IP 192.168.0.1. Bạn có che dấu int với 0xFF không? Hay bạn chỉ truyền int thành byte?
Matej Kormuth

@MatejKormuth Tôi nghĩ tạo mặt nạ bằng 0xFF sẽ hoạt động.
Bala R

1
@ matej-kormuth bạn cũng có thể diễn đạt nó như Inet4AddressImpl làm:byte[] loopback = {0x7f,0x00,0x00,0x01};
Carlos Ferreyra

"Constructor mặc định không thể xử lý kiểu ngoại lệ UnknownHostException ném bởi siêu constructor ngầm Phải xác định một constructor rõ ràng."
Schutze

Giúp bao gồm việc tạo InetAddress trong một câu lệnh try / catch.
Matthew Redmond

9

Từ API cho InetAddress

Tên máy chủ có thể là một tên máy, chẳng hạn như "java.sun.com" hoặc một văn bản đại diện cho địa chỉ IP của nó. Nếu địa chỉ IP theo nghĩa đen được cung cấp, chỉ tính hợp lệ của định dạng địa chỉ được kiểm tra.


7
ip = InetAddress.getByAddress(new byte[] {
        (byte)192, (byte)168, (byte)0, (byte)102}
);

3

InetAddress.getByName cũng hoạt động cho địa chỉ ip.

Từ JavaDoc

Tên máy chủ có thể là một tên máy, chẳng hạn như "java.sun.com" hoặc một văn bản đại diện cho địa chỉ IP của nó. Nếu địa chỉ IP theo nghĩa đen được cung cấp, chỉ tính hợp lệ của định dạng địa chỉ được kiểm tra.


3

Api khá dễ sử dụng.

// Lookup the dns, if the ip exists.
 if (!ip.isEmpty()) {
     InetAddress inetAddress = InetAddress.getByName(ip);
     dns = inetAddress.getCanonicalHostName(); 
 }

0

Đây là một dự án lấy địa chỉ IP của bất kỳ trang web nào, nó hữu ích và rất dễ thực hiện.

import java.net.InetAddress;
import java.net.UnkownHostExceptiin;

public class Main{
    public static void main(String[]args){
        try{
            InetAddress addr = InetAddresd.getByName("www.yahoo.com");
            System.out.println(addr.getHostAddress());

          }catch(UnknownHostException e){
             e.printStrackTrace();
        }
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.