2012-03-04 29 views
6
public class InetAddresTest { 
    public static void main(String ... agrs) { 
     try { 
      InetAddress inet = InetAddress.getByName("1.2"); 
      System.out.println("Good ip address"); 
     } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

BTW các InetAddress sản xuất địa chỉ ip trở lại là "1.0.0.2". Tôi không thể tìm thấy một câu trả lời hợp lý từ javadoc của InetAddress. Bạn có thể giải thích về hành vi này không?Làm thế nào đến InetAddress.getByName ("1.2") là địa chỉ IP hợp lệ?

+1

Brian là tại chỗ trên với câu trả lời của mình. Nếu mục tiêu của bạn là xác thực địa chỉ IP thì tôi khuyên bạn nên sử dụng Apache-Commons [InetAddressValidator] (http://commons.apache.org/validator/apidocs/org/apache/commons/validator/routines/InetAddressValidator.html) – CoolBeans

+1

@ CoolBeans - thêm rằng để trả lời, với một thay thế cũng - cảm ơn. –

+0

Apache Commons InetAddressValidator chỉ có thể trợ giúp nếu bạn đang xác thực IPv4, vì bản phát hành hiện tại (1.4) dường như không hỗ trợ IPv6. – Douglas

Trả lời

7

Từ Javadoc (liên kết trong "đại diện nguyên bản của địa chỉ IP" trong Javadoc for InetAddress):

Khi một địa chỉ hai phần được cung cấp, phần cuối cùng được hiểu như là một số lượng 24-bit và được đặt trong đúng ba byte của địa chỉ mạng. Điều này làm cho định dạng địa chỉ hai phần thuận tiện cho việc xác định địa chỉ mạng lớp A là net.host.

Chỉnh sửa để thêm: Trong trường hợp phần 24bit là khó hiểu đối với bạn:

2 trong 24bit sẽ trông như thế: 00000000 00000000 00000010

mà sau đó được ánh xạ sang phải 3 octet trong IPv4 địa chỉ là: .0.0.2

One More: Như CoolBeans đề cập trong nhận xét cho câu hỏi của bạn, InetAddressValidator từ Apache commons sẽ làm các trick. Điều đó đang được nói, nếu bạn chỉ muốn xác nhận địa chỉ IP và không có một sự phụ thuộc bên ngoài, bạn có thể sử dụng Regular Expressions to check IP addresses as well

Các vấn đề liên quan