Существует причина, по которой вы получаете «действительный» результат: 200
является действительным адресом IPv4.
Смотрите, для компьютера адрес IPv4 - это просто 32-битное число. Точки предназначены исключительно для нашего удобства, потому что мы, люди, сосем запоминание больших точных чисел. Но они не должны быть там; Существуют правила о том, как анализируется адрес, в зависимости от того, сколько его частей.
Когда адрес состоит из одного числа, он считается 32-разрядным числом, и каждый байт равен 8 битам этого числа. Если вы проанализируете "200"
как IP-адрес, это будет эквивалентно 0.0.0.200. Аналогично, "2130706433"
будет эквивалентно 127.0.0.1.
Существуют также стандарты для случаев, когда адрес состоит из двух частей, таких как 0,200 (первая часть - первый байт, а вторая часть - 24-разрядное число, представляющее остальные 3 байта) и даже 0,0.200 (первые два числа). являются байтами, последняя часть составляет 16 бит и занимает другие 2 байта). «Необычные» форматы остались со времен классов IP-адресов, но почти все программное обеспечение, которое должно анализировать их, поймет их. (Если вы откроете браузер и перейдете к http://1249739112
* или даже http://74.125.33128
*, например, откроется домашняя страница Google.)
* Смотрите комментарии для кликабельных ссылок. Спасибо, "ссылка валидатор". : P
Подробнее см. http://download.oracle.com/javase/6/docs/api/java/net/Inet4Address.html или http://www.perlmonks.org/?node_id=221512, или http://en.wikipedia.org/wiki/IPv4#Address_representations,.
Java также понимает эти форматы (как и .net, а также любую приличную ОС) и правильно анализирует адрес, содержит ли он 1, 2, 3 или 4 части.
Если вы хотите проверить, что потенциальный адрес действительно выглядит как «xxx.xxx.xxx.xxx», то вы, вероятно, захотите явно проверить это, используя шаблон или библиотеку проверки, которая учитывает 32- битовые числа как недействительные адреса (даже если они действительны). Но я бы не стал беспокоиться - если вы используете предоставленные функции поиска, вы можете принять адрес в любом стандартном формате, и он будет работать.
(Весь этот беспорядок меняется с IPv6; есть гораздо более строгий формат, и вы не можете просто ввести какое-то 36-значное число и ожидать, что он будет работать. Но платформа все еще знает, как анализировать адрес, и вы должны доверься этому.)