# Java-net-programming **Repository Path**: sky_kia/Java-net-programming ## Basic Information - **Project Name**: Java-net-programming - **Description**: Java网络编程 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-04-13 - **Last Updated**: 2025-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #<> # <> 奥莱利出版集团 修改人: sky ```xml org.apache.httpcomponents httpclient 4.5.12 redis.clients jedis 2.10.2 org.apache.activemq activemq-all 5.15.9 mysql mysql-connector-java 8.0.11 ``` 学完了这个, 那抹 apache 的 httpClient 源码可以读; 了解它的原理; java.net 全部86个文件 java.net 包可以大致分为两个部分: 低级 API,用于处理以下抽象: 地址,也就是网络标识符,如 IP 地址。 套接字,也就是基本双向数据通信机制。 接口,用于描述网络接口。 高级 API,用于处理以下抽象: URI,表示统一资源标识符。 URL,表示统一资源定位符。 连接,表示到 URL 所指向资源的连接。 地址: 在整个 java.net API 中,地址或者用作主机标识符或者用作套接字端点标识符。 InetAddress 类是表示 IP(Internet 协议)地址的抽象。它拥有两个子类: 用于 IPv4 地址的 Inet4Address。 用于 IPv6 地址的 Inet6Address。 但是,在大多数情况下,不必直接处理子类,因为 InetAddress 抽象应该覆盖大多数必需的功能。 关于 IPv6 并非所有系统都支持 IPv6 协议,而当 Java 网络连接堆栈尝试检测它并在可用时透明地使用它时, 还可以利用系统属性禁用它。在 IPv6 不可用或被显式禁用的情况下,Inet6Address 对大多数网络连接操作都不再是有效参数。 虽然可以保证在查找主机名时 java.net.InetAddress.getByName 之类的方法不返回 Inet6Address, 但仍然可能通过传递字面值来创建此类对象。在此情况下,大多数方法在使用 Inet6Address 调用时都将抛出异常。 套接字: 套接字是在网络上建立机器之间的通信链接的方法。java.net 包提供 4 种套接字: Socket 是 TCP 客户端 API,通常用于连接远程主机。 ServerSocket 是 TCP 服务器 API,通常接受源于客户端套接字的连接。 DatagramSocket 是 UDP 端点 API,用于发送和接收数据包 MulticastSocket 是 DatagramSocket 的子类,在处理多播组时使用。 使用 TCP 套接字的发送和接收操作需要借助 InputStream 和 OutputStream 来完成,这两者是通过 Socket.getInputStream() 和 Socket.getOutputStream() 方法获取的。 接口: NetworkInterface 类提供 API 以浏览和查询本地机器的所有网络接口(例如,以太网连接或 PPP 端点)。 只有通过该类才可以检查是否将所有本地接口都配置为支持 IPv6。 高级 API java.net 包中的许多类可以提供更加高级的抽象,允许方便地访问网络上的资源。这些类为: URI 是表示在 RFC 2396 中指定的统一资料标识符的类。顾名思义,它只是一个标识符,不直接提供访问资源的方法。 URL 是表示统一资源定位符的类,它既是 URI 的旧式概念又是访问资源的方法。 URLConnection 是根据 URL 创建的,是用于访问 URL 所指向资源的通信链接。此抽象类将大多数工作委托给底层协议处理程序,如 http 或 ftp。 HttpURLConnection 是 URLConnection 的子类,提供一些特定于 HTTP 协议的附加功能。 建议的用法是使用 URI 指定资源,然后在访问资源时将其转换为 URL。从该 URL 可以获取 URLConnection 以进行良好控制, 也可以直接获取 InputStream。 下面是一个示例: URI uri = new URI("http://java.sun.com/"); URL url = uri.toURL(); InputStream in = url.openStream(); 协议处理程序 如上所述,URL 和 URLConnection 都依赖于协议处理程序,所以协议处理程序必须存在;否则将抛出异常。 此为与 URI 的主要不同点,URI 仅标识资源,所以不必访问协议处理程序。因此,尽管可能利用任何种类的协议方案 (例如, myproto://myhost.mydomain/resource/)创建 URI,但类似的 URL 仍将试图实例化指定协议的处理程序; 如果指定协议的处理程序不存在,则抛出异常。 默认情况下,协议处理程序从默认位置动态加载。但是,通过设置 java.protocol.handler.pkgs 系统属性也可能增加搜索路径。 例如,如果将其设置为 myapp.protocols,则 URL 代码将首先尝试(对于 http 而言)加载 myapp.protocols.http.Handler, 然后,如果失败,则尝试从默认位置加载 http.Handler。 注意,处理程序类必须为抽象类 URLStreamHandler 的子类。 java 本身没有提供 抓包的API , 既 TCP 和 UDP 包想要抓取, 光靠jdk本身是不够的, 必须借助 winCap 进行抓包 ; Java 配置 wincap 和 其API 必须在 idea 和 jdk 中配置; 把 Jpcap.dll 放到 ${JAVA_HOME}/bin 目录下, 我的是 D:\Program Files\Java\jdk1.8.0_202\bin 把 jpcap.jar 放到 ${JAVA_HOME}/lib 目录下, 我的是 D:\Program Files\Java\jdk1.8.0_202\lib 并配置 idea 把 jpcap.jar 添加到工程依赖中; # <> Java网络编程核心技术详解 作 者 孙卫琴 出版社 电子工业出版社 出版时间 2020年1月 WindowsSelectorImpl 这个类是 专属于 Windows 平台的; Linux 平台就不叫这个类; so NIO 底层和各个平台有关;