概述
网络编程的本质是进程间通信
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:数据包类
 
