在 Java
中网络管理与 IO
流一样拥有着错综复杂的分支,虽平日涉及的网络开发更多的是使用 okhttp
等工具库,但对于部分基础场景,Java
自带功能即可满足,下面就让我们了解一番。
1. 资源服务
(1) URI
URI
在 Java
中用于标识统一资源的位置和标识符, 如文件、网页、电子邮件。
(2) URL
除了 URI
同时还提供了 URL
专门针对网络资源,可以理解为 URI
的子集。
URL
的基本使用示例如下,通过其可以验证 URL
资源的合法性以及其基本信息:
java
public void urlDemo() {
String http = "http://127.0.0.1:8080/api/user/list";
try {
URL url = new URL(http);
// Get url protocol
String protocol = url.getProtocol();
System.out.println("Protocol: " + protocol);
// Get url host
String host = url.getHost();
System.out.println("Host: " + host);
// Get url port
int port = url.getPort();
System.out.println("Port: " + port);
// Get url address
String path = url.getPath();
System.out.println("Path: " + path);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
(3) IP查询
通过 InetAddress
类可以获取当前本机服务的 IP
等信息。
方法 | 作用 |
---|---|
getLocalHost() | 获取本机服务信息实例。 |
getHostName() | 获取本机 hostname。 |
getHostAddress() | 获取服务 IP 信息。 |
相应的代码示例如下:
java
public void demo throws Exception {
InetAddress localHost = InetAddress.getLocalHost();
// Host: node102/192.168.0.103
String host = String.valueOf(localHost);
System.out.println("Host: " + host);
// Host name: node103
String hostName = localHost.getHostName();
System.out.println("Host name: " + hostName);
// IP: 192.168.0.103
String ipAddress = localHost.getHostAddress();
System.out.println("IP: " + ipAddress);
}
3. 服务测试
(1) PING
通过 isReachable()
方法测试当前服务能否访问目标 IP
,作用效果类似于 PING
命令。
java
private boolean pingHost(String ip) {
boolean isConnected;
try {
InetAddress inet = InetAddress.getByName(ip);
isConnected = inet.isReachable(10000);
} catch (Exception e) {
isConnected = false;
}
return isConnected;
}
(2) Telnet
通过 connect()
方法测试当前服务能否访问目标 IP
与端口,作用效果类似于 Telnet
命令。
java
private boolean telnetHost(String ip, int port) {
boolean isConnected;
try (Socket socket = new Socket()) {
InetSocketAddress inet = new InetSocketAddress(ip, port);
socket.connect(inet, 10000);
isConnected = socket.isConnected();
} catch (Exception e) {
isConnected = false;
}
return isConnected;
}
3. 网络请求
HttpURLConnection
是 JDK
自带的网络请求工具类,常见方法参考下表。
注意针对创建的连接复用取决于是否开启了长连接,以及是否关闭了 getInputStream()
返回的流对象,详细说明可以参考官方文档:链接直达.
方法 | 作用 |
---|---|
openConnection() | 新建网络连接服务。 |
setRequestMethod() | 设置请求方式,默认 GET。 |
setConnectTimeout() | 设置连接超时时间。 |
setReadTimeout() | 设置读取超时时间。 |
getInputStream() | 读取连接返回流数据。 |
disconnect() | 关闭连接。 |
如测试 http://127.0.0.1:8080/demo
页面服务是否正常。
java
private boolean testUrl(String urlAddr) {
boolean isConnected;
try {
URL url = new URL(urlAddr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(10000);
conn.setReadTimeout(10000);
isConnected = 200 == conn.getResponseCode();
conn.disconnect();
} catch (Exception e) {
isConnected = false;
}
return isConnected;
}