Java Socket并发编程
1. 概述
在网络编程中,Socket是一种用于实现网络通信的一种机制。Java提供了Socket类和ServerSocket类,可以方便地进行Socket编程。在并发编程中,我们可以利用Java的多线程机制,实现多个客户端与服务器之间的并发通信。
本文将介绍如何使用Java Socket进行并发编程,主要包括以下内容:
- 整体流程
- 准备工作
- 创建服务器端
- 创建客户端
- 运行与测试
2. 整体流程
下表展示了Java Socket并发编程的整体流程:
步骤 | 说明 |
---|---|
准备工作 | 导入所需的类和包,创建服务器Socket,设定服务器端口号 |
创建服务器端 | 使用多线程创建服务器端,接受并处理客户端的连接请求 |
创建客户端 | 通过Socket连接服务器端,实现与服务器的通信 |
运行与测试 | 分别运行服务器端和客户端,进行并发通信测试 |
3. 准备工作
在开始编写代码之前,我们需要导入Java所需的类和包,并创建服务器Socket和设定服务器端口号。代码如下:
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) {
int port = 8080; // 服务器端口号
ServerSocket serverSocket = null;
Socket socket = null;
try {
// 创建服务器Socket
serverSocket = new ServerSocket(port);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
// 接受客户端连接
socket = serverSocket.accept();
// 创建新线程处理客户端请求
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭服务器Socket
try {
if (serverSocket != null) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4. 创建服务器端
为了实现并发处理客户端的连接请求,我们使用多线程创建服务器端。在服务器端代码中,我们需要创建一个ServerThread类,继承Thread类,并重写run()方法。该线程类用于处理客户端的连接请求和数据交互。代码如下:
import java.io.*;
import java.net.*;
public class ServerThread extends Thread {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
System.out.println("客户端" + socket.getInetAddress() + "已连接");
// 获取输入流和输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream());
// 读取客户端发送的数据
String message = reader.readLine();
// 向客户端发送响应数据
writer.println("服务器已接收到数据:" + message);
writer.flush();
// 关闭输入流、输出流和Socket连接
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 创建客户端
客户端用于与服务器进行通信,可以发送请求数据并接收服务器的响应数据。以下是客户端代码:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
String serverIP = "127.0.0.1"; // 服务器IP地址
int serverPort = 8080; // 服务器端口号
try {
// 连接服务器
Socket socket = new Socket(serverIP, serverPort);
// 获取输入流和输出流
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream());
// 向服务器发送数据
writer.println("Hello Server");
writer.flush();
// 读取服务器响应数据
String response = reader.readLine();
System.out.println(response);
// 关闭输入流、输出流和Socket连接
reader.close();
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}