概述
网络编程的本质是进程间通信
Java 中的网络支持:
- InetAddress:用于表示网络上的硬件资源,即 IP 地址;
- URL:统一资源定位符;
- Sockets:使用 TCP 协议实现网络通信;
- Datagram:使用 UDP 协议实现网络通信。
InetAddress
没有公有的构造函数,只能通过静态方法来创建实例。
InetAddress.getByName(String host);
InetAddress.getByAddress(byte[] address);[
](https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20IO.md#url)
URL
可以直接从 URL 中读取字节流数据。
publicstaticvoid main(String[] args) throws IOException {
URL url =newURL("http://www.baidu.com");
/* 字节流 */
InputStream is = url.openStream();
/* 字符流 */
InputStreamReader isr =newInputStreamReader(is, "utf-8");
/* 提供缓存功能 */
BufferedReader br =newBufferedReader(isr);
String line;
while ((line = br.readLine()) !=null) {
System.out.println(line);
}
br.close();
}
Sockets
在Java中,提供了两个类用于实现TCP通信程序:
客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端的连接
服务器和客户端通过 InputStream 和 OutputStream 进行输入输出。
Unix中的Socket
Unix系统中一切皆是文件。
文件描述符表示已经打开文件的索引,是一个数字,从零开始
每个进程都会维护一个文件描述符表
Datagram
- DatagramSocket:通信类
- DatagramPacket:数据包类