Java的基本网络支持
InetAddress类
InetAddress类本身并没有提供太多功能,他代表一个IP地址对象,是网络通信的基础 代表标准的IP地址,它不带端口。提供了一些方法来测试关于特定IP地址的属性。它又包含了Inet4Address和Inet6Address。
如果想获取关于该IP地址的一些相关属性,即可通过该类提供的方法进行判断。
InetSocketAddress: 它代表了IP地址+端口号。
Java提供了InetAddress类来代表IP地址,InetAddress下还有2个子类:Inet4Address、Inet6Address,它们分别代表Internet Protocol version 4(IPv4)地址和Internet Protocol version 6(IPv6)地址。
InetAddress类没有提供构造器,而是提供了如下两个静态方法来获取InetAddress实例:
* getByName(String host):根据主机获取对应的InetAddress对象。
* getByAddress(byte[] addr):根据原始IP地址来获取对应的InetAddress对象。
InetAddress还提供了如下三个方法来获取InetAddress实例对应的IP地址和主机名:
* String getCanonicalHostName():获取此 IP 地址的全限定域名。
* String getHostAddress():返回该InetAddress实例对应的IP地址字符串(以字符串形式)。
* String getHostName():获取此 IP 地址的主机名。
程序实例
import java.net.InetAddress;
public class InetAddressTest {
public static void main(String[] args)throws Exception {
//根据主机名来获取对应的InetAddress实例
InetAddress ip=InetAddress.getByName("www.crazyit.org");
System.out.println(ip);
//判断是否可达
System.out.println("crazyit是否可达: " + ip.isReachable(2000));
//获取该InetAddress实例的IP字符串
System.out.println(ip.getHostAddress());
//根据原始IP地址来获取对应的InetAddress实例
InetAddress local = InetAddress.getByAddress(new byte[]{127,0,0,1});
System.out.println("本机是否可达: " + local.isReachable(5000));
//获取该InetAddress实例对应的全限定域名
System.out.println(local.getCanonicalHostName());
}
}
运行结果:
www.crazyit.org/222.73.85.205
crazyit是否可达: true
222.73.85.205
本机是否可达: true
127.0.0.1
两个工具类:URLDecoder与URLEncoder
URLEncoder这个工具类包含一个encode(String s,String enc)静态方法,它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。可以把“非西欧文字”编码成%B7%E8%BF%F1的形式。
—-在有些场景,无法传输和存储非西欧文字,此时就需要用到URLEncoder。典型的像Cookie,Cookie的值就不能是中文。
URLDecoder这个工具类包含一个decode(String s,String enc)静态方法,它可以将看上去是乱码的特殊字符串转转成普通字符串。可以把%B7%E8%BF%F1的形式的文字解码成“非西欧文字”。
==实际上这两个工具就是用来进行非西欧字符串和特殊字符串之间的相互转换,URLEncoder是编码,URLDecoder是解码。==
程序实例:
import java.net.URLDecoder;
import java.net.URLEncoder;
public class URLDecoderTest {
public static void main(String[] args)throws Exception {
//将application/x-www-from-urlencoded字符串转换成普通字符串
String keyWord = URLDecoder.decode("%E7%96%AF%E7%8B%82java", "utf-8");
System.out.println(keyWord);
//将普通字符串转换成特殊字符串
String urlStr = URLEncoder.encode("申鹏博", "GBK");
System.out.println(urlStr);
}
}
输出结果
疯狂java
%C9%EA%C5%F4%B2%A9