Java网络编程深度解析
一、网络编程基础概念
1.1 网络协议分层模型
Java网络编程主要基于TCP/IP协议栈,理解分层模型至关重要:
- OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
- TCP/IP四层模型:网络接口层、网络层、传输层、应用层
- Java主要涉及的层次:传输层(TCP/UDP)和应用层(HTTP/FTP等)
1.2 关键网络概念
- IP地址:设备的网络标识(IPv4/IPv6)
- 端口号:0-65535,标识主机上的特定服务
- Socket:网络通信的端点,IP地址+端口号
- 协议:TCP(可靠连接)和UDP(无连接)
二、Java网络编程核心API
2.1 Java.net包核心类
// TCP相关
Socket // 客户端Socket
ServerSocket // 服务端Socket
// UDP相关
DatagramSocket
DatagramPacket
// URL处理
URL
URLConnection
HttpURLConnection
2.2 NIO包(New I/O)
ByteBuffer
Channel // SocketChannel, ServerSocketChannel
Selector // 多路复用选择器
Charset // 字符编码处理
三、TCP编程实战
3.1 基础TCP通信实现
服务端代码示例:
import java.io.*;
import java.net.*;public class TCPServer {public static void main(String[] args) throws IOException {// 1. 创建ServerSocket,监听指定端口ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器启动,等待客户端连接...");// 2. 接受客户端连接Socket clientSocket = serverSocket.accept();System.out.println("客户端连接成功:" + clientSocket.getInetAddress());// 3. 获取输入输出流BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);// 4. 通信循环String request;while ((request = in.readLine()) != null) {System.out.println("收到客户端消息:" + request);String response = "服务器响应:" + request.toUpperCase();out.println(response);}// 5. 关闭资源clientSocket.close();serverSocket.close();}
}
客户端代码示例:
import java.io.*;
import java.net.*;public class TCPClient {public static void main(String[] args) throws IOException {// 1. 创建Socket连接服务器Socket socket = new Socket("localhost", 8888);// 2. 获取输入输出流BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);// 3. 用户输入处理BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));System.out.println("请输入消息(输入exit退出):");String userMsg;while ((userMsg = userInput.readLine()) != null) {if ("exit".equalsIgnoreCase(userMsg)) break;// 4. 发送消息并接收响应out.println(userMsg);String response = in.readLine();System.out.println("服务器响应:" + response);}// 5. 关闭连接socket.close();}
}
3.2 多线程TCP服务器
处理多个客户端连接:
import java.io.*;
import java.net.*;public class MultiThreadTCPServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(8888);System.out.println("多线程服务器启动...");while (true) {