- 浏览: 646553 次
- 性别:
- 来自: 广州
文章分类
最新评论
本文为原创,如需转载,请注明作者和出处,谢谢!
上一篇:Java网络编程从入门到精通(8):用getAddress方法获得IP地址
IP地址分为普通地址和特殊地址。在前面的文章中所使用的大多数都是普通的IP地址,在本文中将介绍如何利用InetAddress类提供的十个方法来确定一个IP地址是否是一个特殊的IP地址。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if !mso]>
<style>
st1":*{behavior:url(#ieooui) }
</style>
<![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
</style>
<![endif]-->
一、isAnyLocalAddress方法
当IP地址是通配符地址时返回true,否则返回false。这个通配符地址对于拥有多个网络接口(如两块网卡)的计算机非常拥有。使用通配符地址可以允许在服务器主机接受来自任何网络接口的客户端连接。IPv4的通配符地址是0.0.0.0。IPv6的通配符地址是0:0:0:0:0:0:0:0,也可以简写成::。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="ProgId" content="Word.Document"> <meta name="Generator" content="Microsoft Word 11"> <meta name="Originator" content="Microsoft Word 11"> <link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"> <!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face {font-family:""@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; font-size:10.5pt; font-family:"Times New Roman";} /* Page Definitions */ @page {} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} </style> <![endif]-->二、isLoopbackAddress方法
当IP地址是loopback地址时返回true,否则返回false。loopback地址就是代表本机的IP地址。IPv4的loopback地址的范围是127.0.0.0 ~ 127.255.255.255,也就是说,只要第一个字节是127,就是lookback地址。如127.1.2.3、127.0.200.200都是loopback地址。IPv6的loopback地址是0:0:0:0:0:0:0:1,也可以简写成::1。我们可以使用ping命令来测试lookback地址。如下面的命令行所示:
<meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face {font-family:""@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; font-size:10.5pt; font-family:"Times New Roman";} /* Page Definitions */ @page {} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} </style> <![endif]-->
运行结果:
Replyfrom127.0.0.1:bytes=32time<1msTTL=128
Replyfrom127.0.0.1:bytes=32time<1msTTL=128
Replyfrom127.0.0.1:bytes=32time<1msTTL=128
Pingstatisticsfor127.200.200.200:
Packets:Sent=4,Received=4,Lost=0(0%loss),
Approximateroundtriptimesinmilli-seconds:
Minimum=0ms,Maximum=0ms,Average=0ms
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 </xml><![endif]--><!--[if gte mso 9]><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1;} @font-face {font-family:""@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; font-size:10.5pt; font-family:"Times New Roman";} /* Page Definitions */ @page {} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable { mso-style-parent:""; font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} </style> <![endif]-->
虽然127.255.255.255也是loopback地址,但127.255.255.255在Windows下是无法ping通的。这是因为127.255.255.255是广播地址,在Windows下对发给广播地址的请求不做任何响应,而在其他操作系统上根据设置的不同,可能会得到不同的结果。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><![endif]--><!--[if !mso]>
<style>
st1":*{behavior:url(#ieooui) }
</style>
<![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
</style>
<![endif]-->
三、isLinkLocalAddress方法
当IP地址是本地连接地址(LinkLocalAddress)时返回true,否则返回false。IPv4的本地连接地址的范围是169.254.0.0 ~ 169.254.255.255。IPv6的本地连接地址的前12位是FE8,其他的位可以是任意取值,如FE88::、FE80::ABCD::都是本地连接地址。
四、isSiteLocalAddress方法
当IP地址是地区本地地址(SiteLocalAddress)时返回true,否则返回false。IPv4的地址本地地址分为三段:10.0.0.0 ~ 10.255.255.255、172.16.0.0 ~ 172.31.255.255、192.168.0.0 ~ 192.168.255.255。IPv6的地区本地地址的前12位是FEC,其他的位可以是任意取值,如FED0::、FEF1::都是地区本地地址。
五、isMulticastAddress方法
当IP地址是广播地址(MulticastAddress)时返回true,否则返回false。通过广播地址可以向网络中的所有计算机发送信息,而不是只向一台特定的计算机发送信息。IPv4的广播地址的范围是224.0.0.0 ~ 239.255.255.255。IPv6的广播地址第一个字节是FF,其他的字节可以是任意值。关于广播地址的详细内容将在以后的章节中讨论。
六、isMCGlobal方法
当IP地址是全球范围的广播地址时返回true,否则返回false。全球范围的广播地址可以向Internet中的所有的计算机发送信息。IPv4的广播地址除了224.0.0.0和第一个字节是239的IP地址都是全球范围的广播地址。IPv6的全球范围的广播地址中第一个字节是FF,第二个字节的范围是0E ~ FE,其他的字节可以是任意值,如FFBE::、FF0E::都是全球范围的广播地址。
七、isMCLinkLocal方法
当IP地址是子网广播地址时返回true,否则返回false。使用子网的广播地址只能向子网内的计算机发送信息。IPv4的子网广播地址的范围是224.0.0.0 ~ 224.0.0.255。IPv6的子网广播地址的第一个字节是FF,第二个字节的范围是02 ~ F2,其他的字节可以是任意值,如FFB2::、FF02:ABCD::都是子网广播地址。
八、isMCNodeLocal方法
当IP地址是本地接口广播地址时返回true,否则返回false。本地接口广播地址不能将广播信息发送到产生广播信息的网络接口,即使是同一台计算机的另一个网络接口也不行。所有的IPv4广播地址都不是本地接口广播地址。IPv6的本地接口广播地址的第一个字节是FF,第二个节字的范围是01 ~ F1,其他的字节可以是任意值,如FFB1::、FF01:A123::都是本地接口广播地址。
九、isMCOrgLocal方法
当IP地址是组织范围的广播地址时返回ture,否则返回false。使用组织范围广播地址可以向公司或企业内部的所有的计算机发送广播信息。IPv4的组织范围广播地址的第一个字节是239,第二个字节不小于192,第三个字节不大于195,如239.193.100.200、239.192.195.0都是组织范围广播地址。IPv6的组织范围广播地址的第一个字节是FF,第二个字节的范围是08 ~ F8,其他的字节可以是任意值,如FF08::、FF48::都是组织范围的广播地址。
十、isMCSiteLocal方法
当IP地址是站点范围的广播地址时返回true,否则返回false。使用站点范围的广播地址,可以向站点范围内的计算机发送广播信息。IPv4的站点范围广播地址的范围是239.255.0.0 ~ 239.255.255.255,如239.255.1.1、239.255.0.0都是站点范围的广播地址。IPv6的站点范围广播地址的第一个字节是FF,第二个字节的范围是05 ~ F5,其他的字节可以是任意值,如FF05::、FF45::都是站点范围的广播地址。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
</style>
<![endif]-->
下面的代码可以确定一个IP地址是否在上述十种地址类型的范围内:
importjava.net.*;
importjava.lang.reflect.*;
publicclass MyNet
{
publicstaticvoidmain(String[]args)throwsException
{
if(args.length==0)
return;
InetAddressaddress=InetAddress.getByName(args[0]);
Methodmethods[]=InetAddress.class.getMethods();
//以is开头并且没有参数的方法
for(Methodmethod:methods)
{
if(method.getName().matches("is.*") &&method.getParameterTypes().length==0)
{
if(Boolean.parseBoolean(method.invoke(address).toString()))
System.out.println(method.getName()+"=true");
}
}
}
}
- 测试1
执行如下命令:
运行结果:
isMulticastAddress=true
- 测试2
执行如下命令:
运行结果:
isMulticastAddress=true
如果未输出任何结果,说明指定的IP地址并不属性上述的十种IP地址类型的范围,只是一个普通的IP地址。
下一篇:Java网络编程从入门到精通(10):Inet4Address类和Inet6Address类
国内最棒的Google Android技术社区(eoeandroid),欢迎访问!
《银河系列原创教程》发布
《Java Web开发速学宝典》出版,欢迎定购
相关推荐
3. **地址类型判断**:`isXxx()`系列方法用于判断地址类型,如判断是否为本地地址、链接本地地址等。 4. **特定地址类型**:`Inet4Address`和`Inet6Address`类分别用于处理IPv4和IPv6地址。 #### 网络接口与可达性...
### Java网络编程精要 #### 一、Internet地址概述 ...综上所述,Java网络编程涵盖了从基础的IP地址处理到高级的非阻塞I/O技术,涉及的知识点丰富且复杂。掌握这些技术,可以构建高性能、高可靠性的网络应用程序。
在C#编程中,有时我们可能需要快速判断一个值或字符串是否符合特定的数据类型或格式。在本篇文章中,我们将探讨"C#探秘系列(二)——IsXXX 系列方法",这是一个关于如何利用C#与其他.NET语言的互操作性来实现便捷的...
此外,了解如何使用`class`、`isXXX`(如`isnumeric`、`islogical`)等函数检查数据类型也是十分有用的技能。 总之,MATLAB的数据类型是其强大功能的基础,深入理解和运用它们将帮助你更好地利用MATLAB解决实际问题...
Java编程规范是编写高质量、可读性强、易于维护的Java代码的重要指导原则。这些规范涵盖了命名规范、源文件样式以及代码布局等多个方面,确保代码的一致性和可理解性。 1. **命名规范** - **Package命名**:...
对于属性的存取方法,应使用`getXXX()`和`setXXX()`这样的名称,而对于返回`boolean`类型的判断方法,则推荐使用`isXXX()`或`hasXXX()`这样的命名方式。 **1.8 一般命名注意事项** - **重要性**: 高 - **规范**: ...
对于属性的存取方法,使用`getXXX()`、`setXXX()`或`isXXX()`、`hasXXX()`。例如,布尔类型的方法可以用`isDone()`或`hasError()`。 **一般命名注意事项** - 变量名应使用完整英文单词或约定俗成的缩写,如`public...
Java编程规范是开发高质量、可维护的Java程序的基础。它涵盖了命名规范、源文件样式、版权信息、导入管理和类字段等多个方面。以下是这些规范的详细解释: **命名规范** 1. **Package命名**:包名通常由小写字母...
Java规范建议类名使用驼峰式命名,包名全小写,常量全大写,变量和方法首字母小写,遵循一定的命名约定,如`isXXX`表示布尔型的getter方法。 3. **异常处理**:异常处理是系统健壮性的关键。规范可能要求避免使用空...
- **原因**:在远程过程调用(RPC)中,使用包装数据类型而非基本数据类型作为方法的返回值或参数,可以在服务调用失败时返回`null`,从而更好地表达异常状态。例如,在展示交易总额变化百分比时,如果使用基本数据...
5. **字段**:常量用大写字母和下划线分隔,变量和参数根据类型使用前缀,如strXXX(字符串), isXXX(布尔型)。 6. **集合**:以复数形式表示存储对象的类型。 7. **方法**:动词开头,大小写混合,get前缀用于...
- 对于布尔类型的属性,可以使用`isXXX()`替代`getXXX()`。 2. **方法的命名**: - 所有的getter和setter方法都应当采用帕斯卡命名法。 - 例如,获取某个属性的方法命名为`getPersonInfo()`,而设置相应属性的...
【Java开发规范】是指导程序员遵循的一套标准和准则,旨在提升代码的可读性、可维护性、可扩展性和一致性。以下是对这份规范的详细解释: **代码组织与风格** 1. **长度控制**:函数的有效代码长度推荐在100行以内...
- 如果有布尔类型的属性,应使用`isXXX`而不是`getXXX`。 - JavaBean类应该有一个无参数的构造函数。 - JavaBean类应该在一个包内定义,并且该包通常遵循某种命名规则。 **使用场景:** - JavaBean常用于MVC模式...
- **背景信息:**JavaBeans是Java中一种遵循特定编码约定的组件模型,这些约定包括使用getter和setter方法来访问和设置属性值。 - **实现方式:**JavaBeans工具通常通过**反射机制**来自动检测JavaBean的属性。...
- **方法**:方法名称应描述其执行的任务,返回真假值的方法名应明确表示条件(如isXXX, hasYYY)。 4. **其他规范**: - **变量**:变量的命名应反映其作用,遵循相应的命名约定,如局部变量小写,常量全大写。 ...
- 避免对集合进行null检查后才进行size()判断,可以使用`CollectionUtils.isEmpty()`方法。 - 对于Map的操作,要特别注意键值对的非空检查。 6. **并发处理**: - 使用并发工具类,如`Atomic`、`...
8. **【强制】** POJO类中布尔类型的变量,应该使用`isXxx`方式来命名。 - **说明**:这有助于在IDE中自动识别并提供getter和setter方法的支持。 - **正例**: ```java boolean isUserActive; ``` #### (二) ...
3. **异常处理**:Java的异常处理使用try-catch-finally结构。当try块中的代码抛出异常时,控制流会跳转到匹配的catch块。不论是否捕获到异常,finally块的代码总会被执行,确保资源的正确释放。 4. **接口**:接口...