概述

网络编程的本质是进程间通信
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 中读取字节流数据。

  1. publicstaticvoid main(String[] args) throws IOException {
  2. URL url =newURL("http://www.baidu.com");
  3. /* 字节流 */
  4. InputStream is = url.openStream();
  5. /* 字符流 */
  6. InputStreamReader isr =newInputStreamReader(is, "utf-8");
  7. /* 提供缓存功能 */
  8. BufferedReader br =newBufferedReader(isr);
  9. String line;
  10. while ((line = br.readLine()) !=null) {
  11. System.out.println(line);
  12. }
  13. br.close();
  14. }

Sockets

在Java中,提供了两个类用于实现TCP通信程序
客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。
服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端的连接
服务器和客户端通过 InputStream 和 OutputStream 进行输入输出。

Java基础——网络 - 图3Unix中的Socket

Unix系统中一切皆是文件。
文件描述符表示已经打开文件的索引,是一个数字,从零开始
每个进程都会维护一个文件描述符表

Datagram

  • DatagramSocket:通信类
  • DatagramPacket:数据包类