当前位置: 首页 > news >正文

java.net 包详解

java.net 包是 Java 标准库中用于网络编程的核心包,提供了实现网络应用程序的类和接口。这个包包含了用于处理网络通信的各种类,从底层的套接字到高层的 URL 处理。


1. 核心类和接口

1.1 URL 相关类

URL (Uniform Resource Locator)

  • 表示统一资源定位符,指向互联网上的资源

  • 常用构造方法:

    URL(String spec)  // 通过字符串创建URL
    URL(String protocol, String host, String file)
  • 常用方法:

    String getProtocol()  // 获取协议
    String getHost()      // 获取主机
    int getPort()         // 获取端口
    String getFile()      // 获取文件名
    InputStream openStream()  // 打开到此URL的连接并返回输入流

URLConnection

  • 表示与URL指向资源的通信连接

  • 常用方法:

    void connect()               // 打开通信连接
    InputStream getInputStream() // 获取输入流
    OutputStream getOutputStream() // 获取输出流

HttpURLConnection (extends URLConnection)

  • 专门用于HTTP协议的URL连接

  • 常用方法:

    int getResponseCode()        // 获取HTTP响应码
    String getResponseMessage()  // 获取HTTP响应消息
    void setRequestMethod(String method) // 设置请求方法(GET/POST等)

1.2 InetAddress 类

  • 表示IP地址(IPv4和IPv6)

  • 常用方法:

    static InetAddress getByName(String host)  // 通过主机名获取IP
    static InetAddress getLocalHost()         // 获取本地主机地址
    String getHostAddress()                   // 获取IP地址字符串
    String getHostName()                      // 获取主机名

1.3 Socket 相关类

Socket

  • 客户端套接字,用于建立到服务器的连接

  • 常用构造方法:

    Socket(String host, int port)
  • 常用方法:

    InputStream getInputStream()
    OutputStream getOutputStream()
    void close()

ServerSocket

  • 服务器端套接字,等待客户端连接

  • 常用构造方法:

    ServerSocket(int port)
  • 常用方法:

    Socket accept()  // 监听并接受连接
    void close()

1.4 DatagramSocket 相关类

DatagramSocket

  • 用于发送和接收数据报包(UDP协议)

  • 常用方法:

    void send(DatagramPacket p)
    void receive(DatagramPacket p)

DatagramPacket

  • 表示数据报包

  • 常用构造方法:

    // 接收数据包
    DatagramPacket(byte[] buf, int length)// 发送数据包
    DatagramPacket(byte[] buf, int length, InetAddress address, int port)

2. 网络编程示例

2.1 URL 示例

try {URL url = new URL("https://www.example.com");URLConnection connection = url.openConnection();BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String inputLine;while ((inputLine = in.readLine()) != null) {System.out.println(inputLine);}in.close();
} catch (Exception e) {e.printStackTrace();
}

2.2 TCP Socket 示例

服务器端:

try (ServerSocket serverSocket = new ServerSocket(8080)) {System.out.println("服务器启动,等待连接...");Socket clientSocket = serverSocket.accept();PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String inputLine;while ((inputLine = in.readLine()) != null) {System.out.println("收到: " + inputLine);out.println("服务器响应: " + inputLine);}
} catch (IOException e) {e.printStackTrace();
}

客户端:

try (Socket socket = new Socket("localhost", 8080)) {PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));String userInput;while ((userInput = stdIn.readLine()) != null) {out.println(userInput);System.out.println("服务器回复: " + in.readLine());}
} catch (IOException e) {e.printStackTrace();
}

2.3 UDP 示例

发送方:

try (DatagramSocket socket = new DatagramSocket()) {String message = "Hello UDP";byte[] buf = message.getBytes();InetAddress address = InetAddress.getByName("localhost");DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 9876);socket.send(packet);
} catch (IOException e) {e.printStackTrace();
}

接收方:

try (DatagramSocket socket = new DatagramSocket(9876)) {byte[] buf = new byte[256];DatagramPacket packet = new DatagramPacket(buf, buf.length);socket.receive(packet);String received = new String(packet.getData(), 0, packet.getLength());System.out.println("收到: " + received);
} catch (IOException e) {e.printStackTrace();
}

3. 高级特性

3.1 代理设置

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.example.com", 8080));
URL url = new URL("http://www.example.com");
URLConnection conn = url.openConnection(proxy);

3.2 Cookie 管理

CookieManager manager = new CookieManager();
CookieHandler.setDefault(manager);

3.3 网络接口

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {NetworkInterface ni = interfaces.nextElement();System.out.println("接口名: " + ni.getName());System.out.println("显示名: " + ni.getDisplayName());
}

4. 安全注意事项

  1. 异常处理:网络操作可能抛出多种异常(UnknownHostException, ConnectException等),需要妥善处理

  2. 资源释放:确保关闭所有网络资源(Socket, InputStream等)

  3. 超时设置:设置合理的连接和读取超时

    socket.setSoTimeout(3000); // 3秒超时
  4. 网络安全:考虑使用SSL/TLS进行加密通信(通过HttpsURLConnection)


5. Java 11+ 新特性

Java 11引入了新的HTTP客户端API(java.net.http包),提供了更现代的HTTP客户端实现:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://www.example.com")).build();client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body).thenAccept(System.out::println).join();

java.net 包为Java提供了全面的网络编程支持,从简单的URL处理到底层的套接字通信,可以满足各种网络应用开发需求。

http://www.dtcms.com/a/498871.html

相关文章:

  • Three.js光照技术详解:为3D场景注入灵魂
  • 企业门户网站系统下载网店平台
  • 监听指定事件然后触发鼠标点击操作等,智能文本识别按键工具的使用教程
  • connect 的断线重连
  • wp-config.php文件是什么
  • 编译esp-idf小智报错
  • 微信小程序开发踩坑记:从AI工具翻车到找到合适方案
  • 《3D植被建模痛点解决:开放世界层级实例化+GPU批处理优化方案》
  • openharmony之分布式蓝牙实现多功能场景设备协同实战
  • Linux ARM 程序启动全链路解析:从 shell 到 main(含动态/静态链接)
  • 具身智能黑客松之旅002
  • 免费发布产品网站网站权重能带来什么作用
  • 碰一碰发视频 系统源码 /PHP 语言开发方案
  • 网站大学报名官网入口网站插件代码下载
  • Cors能干什么?为什么需要它?
  • 远程办公自由:rdesktop+cpolar让Windows桌面随身而行
  • 计算机网络(tcp_socket )
  • 【小白笔记】在编程中,如何将概念上的数据结构(比如“树”)转化为代码中具体的数据类型和对象
  • 【STM32项目开源】STM32单片机智能农业大棚控制系统
  • github开源笔记应用程序项目推荐-Joplin
  • 【Swift】LeetCode 438. 找到字符串中所有字母异位词
  • 【SoC】【W800】基于WM IoT SDK的环境搭建
  • BFS 与 DFS——力扣102.二叉树的层序遍历
  • 使用IOT-Tree的OPC UA Client连接器对接OPC UA Server获取数据到系统中
  • 优质网站建设在哪里wordpress分类目录名称
  • 专题一 之 【双指针】
  • 将Windows应用上架至Microsoft Store
  • 对LlamaFactory的一点见解
  • 紫金保险车险官方网站关键词优化营销
  • 大模型-智能体-【篇一:单智能体框架】