Java的基本网络支持
1、InetAddress
InetAddress 是 Java 用来代表 IP 地址的类,他还有两个子类:Inet4Address(IPV4)、Inet6Address(IPV6)。
InetAddress 类没有提供构造器,但可以通过两个静态方法获取实例:
import java.io.IOException;
import java.net.InetAddress;
public class mianfunc {
public static void main(String[] args) throws IOException {
//根据 主机名 获取
InetAddress ip01 = InetAddress.getByName("www.baidu.com");
测试是否可达,尽最大努力试图达到主机,但防火墙和服务器配置可能阻塞请求
System.out.println("www.baidu.com 是否可达:" + ip01.isReachable(2000));
//获取实例的 IP 地址字符串
System.out.println(ip01.getHostAddress());
//根据 IP 地址获取
InetAddress ip02 = InetAddress.getByAddress(new byte[]{127,0,0,1});
System.out.println(ip02.getCanonicalHostName());
}
}
结果:
www.baidu.com 是否可达:true
39.156.66.18
activate.navicat.com
Process finished with exit code 0
2、URLEncoder、URLDecoder
普通字符串和 application/x-www-form-urlencoded MIMF 字符串之间的相互转换。
URL 地址里包含中文时,关键字就会变成所谓的"乱码"—— application/x-www-form-urlencoded MIMF 字符串。
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class mainfunc02 {
public static void main(String[] args) throws UnsupportedEncodingException {
String encode = URLEncoder.encode("Java网络编程编码", "GBK");
System.out.println(encode);
// 采用不同字符集时,每个中文字符对应的字节数并不完全相同,所以需指定字符集
String decode1 = URLDecoder.decode("Java%CD%F8%C2%E7%B1%E0%B3%CC%B1%E0%C2%EB", "GBK");
System.out.println(decode1);
String decode2 = URLDecoder.decode("Java%CD%F8%C2%E7%B1%E0%B3%CC%B1%E0%C2%EB", "utf-8");
System.out.println(decode2);
}
}
结果:
Java%CD%F8%C2%E7%B1%E0%B3%CC%B1%E0%C2%EB
Java网络编程编码
Java�����̱���
Process finished with exit code 0
3、URL、URLConnection、URLPermission
URI(Uniform Resource Identifiers):统一资源标识符
URL(Uniform Resource Locator):统一资源定位器,包含一个可打开到达该资源的输入流,URI的特例。
URL格式:protocol://host:port/resourceName 如:http://www.baidu.com
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
public class mainfunc03 {
public static void main(String[] args) throws IOException {
String myURL = "http://www.baidu.com";
URL url = new URL(myURL);
//获取该URL的资源名
System.out.println(url.getFile());
//获取该URL的主机名
System.out.println(url.getHost());
//获取该URL的路径部分
System.out.println(url.getPath());
//获取该URL的端口号
System.out.println(url.getPort());
//获取该URL的协议名称
System.out.println(url.getProtocol());
//获取该URL的查询字符串部分
System.out.println(url.getQuery());
// 返回一个 URLConnection 对象,它代表与该 URL 所引用的远程对象的连接
URLConnection urlConnection = url.openConnection();
// 打开与此URL的连接,并返回一个用于读取该URL资源的 InputStream
// 可以方便的读取远程资源,甚至可以实现多线程下载
InputStream inputStream = url.openStream();
}
}