目录
一、Java 网络工具类
1、InetAddress 类
2、URL 类
二、Socket 编程
一、Java 网络工具类
1、InetAddress 类
在 TCP/IP 协议族中,是通过 IP 地址来标识网络上的一台主机的。假设需要在程序中获取本机的 IP 地址,该如何编写代码呢?通过查阅 JDK API 文档获悉,在 Java 中,使用 java.net
包下的 InetAddress
类表示互联网协议的 IP 地址。下面的案例演示了如何获得本地主机的 IP 地址
import java.net.*;
public class TestGetIP {
public static void main(String args[]) {
InetAddress myIP = null;
try {
//通过InetAddress类的静态方法,返回本地主机对象
myIP = InetAddress.getLocalHost();
} catch (Exception e) {
e.printStackTrace();
}
//通过InetAddress类的getHostAddress()方法获得IP地址字符串
System.out.println(myIP.getHostAddress());
}
}
如果不仅想获得本地主机的 IP 地址,还想根据用户输入的域名,获取这个域名在互联网上的 IP 地址:
import java.util.Scanner;
import java.net.*;
public class TestGetIP2 {
public static void main(String args[]) {
InetAddress sohuIP = null;
Scanner input = new Scanner(System.in);
System.out.print("请输入要查询IP地址的域名:");
String dName = input.next();
try {
//通过InetAddress类的静态方法,返回指定域名的IP地址对象
sohuIP = InetAddress.getByName(dName);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("域名:" + dName + " 对应的IP地址为:" + sohuIP.getHostAddress());
}
}
通过 InetAddress
类的静态方法获取 InetAddress
对象的方法 :
-
InetAddress[] getAllByName(String host)
:在给定主机名的情况下,根据系统上配置的名称服务 host 返回其 IP 地址所组成的数组。 -
InetAddress getByAddress(byte[] addr)
:给定字节数组形式的 IP 地址,返回InetAddress
对象。 -
InetAddress getByAddress(String host, byte[] addr)
:根据提供的主机名 host 和字节数组形式的 IP 地址 addr,创建InetAddress
对象。 -
InetAddress getByName(String host)
:给定主机名 host,返回InetAddress
对象。 -
InetAddress getLocalHost()
:返回本地主机InetAddress
对象。
InetAddress
类的其他常用方法有以下几种:
-
byte[] getAddress()
:返回此InetAddress
对象的原始 IP 地址。 -
String getCanonicalHostName()
:返回此 IP 地址的完全限定域名。完全限定域名是指主机名加上全路径,全路径中列出了序列中所有域成员。 -
String getHostAddress()
:返回 IP 地址字符串。 -
String getHostName()
:返回此 IP 地址的主机名。
2、URL 类
URL 类代表一个统一资源定位符,它是指向互联网资源的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
下面这个案例的具体需求为先输入要定位的 URL 地址,然后再输入要显示哪个页面标签元素的内容,程序显示该标签的具体内容
import java.util.Scanner;
import java.net.*;
import java.io.*;
public class TestURL {
public static void main(String args[]) {
URL tURL = null;
BufferedReader in = null;
Scanner input = new Scanner(System.in);
System.out.print("请输入要定位的URL地址:");
String url = input.next();
System.out.print("请输入要显示哪个页面标签元素的内容:");
String iStr = input.next();
try {
//通过URL字符串创建URL对象
tURL = new URL(url);
in = new BufferedReader(new InputStreamReader(tURL.openStream()));
String s;
while ((s = in.readLine()) != null) {
if (s.contains(iStr))
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
URLConnection 类
前面介绍的 URL 类代表的是一个网络资源的位置,而接下来要介绍的 URLConnection 代表的是一种连接。此类的实例可用于读取和写入对应 URL 引用的资源。通常,创建一个到 URL 的连接 URLConnection 的对象需要以下几个步骤:
- 通过在 URL 上调用
openConnection()
方法创建连接对象。 - 设置参数和一般请求属性。
- 使用
connect()
方法建立到远程对象的实际连接。 - 远程对象变为可用,其中远程对象的头字段和内容变为可访问。
以下,列出一些 URLConnection 类的属性及其含义。
-
boolean doInput
:将doInput
标志设置为 true,指示应用程序要从 URL 连接读取数据,此属性的默认值为 true。此属性由setDoInput()
方法设置,其值由getDoInput()
方法返回。 -
boolean doOutput
:将doOutput
标志设置为 true,指示应用程序要将数据写入 URL 连接,此属性的默认值为 false。此属性由setDoOutput()
方法设置,其值由getDoOutput()
方法返回。 -
boolean useCaches
:如果其值为 true,则只要有条件就允许协议使用缓存;如果其值为 false,则该协议始终必须获得此对象的新副本,其默认值为上一次调用setDefaultUseCaches()
方法时给定的值。此属性由setUseCaches()
方法设置,其值由getUseCaches()
方法返回。
下面通过程序清单 TestURLConnection.java
中的案例,简要说明 URLConnection
类的使用
import java.net.*;
import java.io.*;
public class TestURLConnection {
public static void main(String args[]) {
try {
//(1)通过在URL上调用openConnection()方法创建连接对象
URL url = new URL("https://06b6a8566c13-service.simplelab.cn/examples/index.html");
//根据URL获取URLConnection对象
URLConnection urlC = url.openConnection();
//请求协议是HTTP协议,故可转换为HttpURLConnection对象
HttpURLConnection hUrlC = (HttpURLConnection) urlC;
//(2)设置参数和一般请求属性
//请求方法如果是POST,参数要放在请求体里,所以要向hUrlC输出参数
hUrlC.setDoOutput(true);
//设置是否从httpUrlConnection读入,默认情况下是true
hUrlC.setDoInput(true);
//请求方法如果是POST,不能使用缓存
hUrlC.setUseCaches(false);
//设置Content-Type属性
hUrlC.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
//设定请求的方法为POST,默认是GET
hUrlC.setRequestMethod("POST");
//(3)使用connect方法建立到远程对象的实际连接
hUrlC.connect();
//(4)远程对象变为可用
//通过HttpURLConnection获取输出输入流,可根据需求进一步操作
OutputStream outStrm = hUrlC.getOutputStream();
InputStream inStrm = hUrlC.getInputStream();
//省略若干代码
} catch (Exception e) {
e.printStackTrace();
}
}
}
二、Socket 编程
Socket
通常也称为套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。Java 语言中的 Socket
编程常用到 Socket
和 ServerSocket
这两个类, Socket
用于端对端的通信,而 ServerSocket
常用于服务端对象的创建,它们都位于 java.net
包中。
Socket
编程可以基于 TCP 编程,也可基于 UDP 编程,其中 TCP 方式主要是通过 Socket
和 ServerSocket
类实现,而 UDP 方式主要通过 DatagramSocket
和 DatagramPacket
类实现