第42天

2023/6/15

# 第42天

网络编程,数据传输

# Java 网络编程

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。

java.net 包中提供了两种常见的网络协议的支持:

TCP:TCP(英语:Transmission Control Protocol,传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP 层是位于 IP 层之上,应用层之下的中间层。TCP 保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。

UDP:UDP (英语:User Datagram Protocol,用户数据报协议),位于 OSI 模型的传输层。一个无连接的协议。提供了应用程序之间要发送数据的数据报。由于UDP缺乏可靠性且属于无连接协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包。

Java 网络编程允许 Java 应用程序通过网络与其他计算机进行通信。Java 提供了一套丰富的 API 来支持网络编程,包括套接字(Socket)、服务器套接字(ServerSocket)、URL、URLConnection 等。

# 实现原理

  1. 套接字(Socket):套接字是网络通信的端点,用于发送和接收数据。Java 提供了 java.net.Socket 类来表示客户端套接字,java.net.ServerSocket 类来表示服务器套接字。

  2. URL 和 URLConnection:URL(统一资源定位符)用于标识网络上的资源。Java 提供了 java.net.URL 类来表示 URL,java.net.URLConnection 类来表示与 URL 的连接。

# 主要方法

  1. 创建客户端套接字
  2. 创建服务器套接字
  3. 发送和接收数据
  4. 使用 URL 和 URLConnection

# 用途

  1. 客户端-服务器通信:通过套接字,可以实现客户端和服务器之间的通信。例如,一个 Web 服务器可以监听特定的端口,等待客户端的连接请求,然后处理请求并返回响应。

  2. 资源访问:通过 URL 和 URLConnection,可以访问网络上的资源。例如,可以使用 URLConnection 类从 URL 下载文件或发送 HTTP 请求。

# 注意事项

  1. 异常处理:网络编程可能会抛出各种异常,如 IOExceptionUnknownHostException 等,因此需要使用 try-catch 语句来处理异常。
  2. 线程安全:在多线程环境下,需要确保网络通信的线程安全。
  3. 性能考虑:网络通信可能会消耗较多的时间和资源,因此在性能敏感的应用中需要考虑优化。

# 示例代码

import java.io.*;
import java.net.*;

public class NetworkExample {
    public static void main(String[] args) {
        try {
            // 创建客户端套接字
            Socket socket = new Socket("localhost", 8080);

            // 发送数据
            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);
            writer.println("Hello, Server!");

            // 接收数据
            InputStream input = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            String response = reader.readLine();
            System.out.println("Server response: " + response);

            // 关闭连接
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


学习编程就像搭积木,一块一块慢慢来,下一篇继续加油!