Есть причина, по которой вы получаете "действительный" результат: 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_presentations, чтобы узнать больше.
Java также понимает эти форматы (как .net и любая достойная ОС) и правильно анализирует адрес, содержит ли он 1, 2, 3 или 4 части.
Если вы хотите проверить, что потенциальный адрес действительно выглядит как «xxx.xxx.xxx.xxx», то вы, вероятно, захотите явно проверить это, используя шаблон или библиотеку проверки, которая рассматривает 32-битные числа как недопустимые адреса (даже если они действительны). Однако я бы не стал беспокоиться - если вы используете предоставленные функции поиска, вы можете принять адрес в любом стандартном формате, и он будет работать.
(Весь этот беспорядок меняется с IPv6; существует гораздо более строгий формат, и вы не можете просто ввести какое-то 36-значное число и ожидать, что он сработает. Но платформа все еще знает, как анализировать адрес, и вы должны доверять ему Сделай так.)
person
cHao
schedule
26.09.2011