实现"Android 一个SocketServer 对应多个client"的步骤如下:
- 创建一个SocketServer对象并监听连接请求。
ServerSocket serverSocket = new ServerSocket(port);
- 接受客户端的连接请求。
Socket clientSocket = serverSocket.accept();
- 将连接的客户端Socket加入到一个列表中,以便之后可以轮询处理多个客户端。
List<Socket> clients = new ArrayList<>();
clients.add(clientSocket);
- 启动一个线程处理客户端的消息传输。
Thread thread = new Thread(new ClientHandler(clientSocket));
thread.start();
- 在ClientHandler类中,处理客户端的消息传输。
public class ClientHandler implements Runnable {
private Socket clientSocket;
public ClientHandler(Socket socket) {
this.clientSocket = socket;
}
@Override
public void run() {
// 处理客户端的消息传输逻辑
}
}
- 在run()方法中,接收客户端的消息,并进行相应的处理。
InputStream inputStream = clientSocket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String message;
while ((message = bufferedReader.readLine()) != null) {
// 处理客户端发送的消息
}
- 向客户端发送消息。
OutputStream outputStream = clientSocket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream, true);
printWriter.println("Hello, client!");
- 在客户端断开连接时,将对应的Socket对象从列表中移除。
clients.remove(clientSocket);
整体流程如下所示:
journey
title 实现 Android 一个SocketServer 对应多个client
section 创建并监听SocketServer
- 创建ServerSocket对象
- 监听连接请求
section 接受客户端的连接请求
- 接受连接请求
- 将客户端Socket加入列表
section 启动线程处理客户端消息传输
- 创建ClientHandler对象
- 启动线程
section 处理客户端消息传输
- 接收消息
- 处理消息
- 发送消息
section 断开连接
- 移除Socket对象
end
下面是完整的代码示例:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class SocketServer {
private static final int PORT = 8080;
private List<Socket> clients;
public SocketServer() {
clients = new ArrayList<>();
}
public void start() {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("Server started. Listening on port " + PORT);
while (true) {
Socket clientSocket = serverSocket.accept();
clients.add(clientSocket);
System.out.println("Client connected: " + clientSocket.getInetAddress());
Thread thread = new Thread(new ClientHandler(clientSocket));
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public class ClientHandler implements Runnable {
private Socket clientSocket;
public ClientHandler(Socket socket) {
this.clientSocket = socket;
}
@Override
public void run() {
try {
InputStream inputStream = clientSocket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String message;
while ((message = bufferedReader.readLine()) != null) {
System.out.println("Received message from client: " + message);
// 处理客户端发送的消息
OutputStream outputStream = clientSocket.getOutputStream();
PrintWriter printWriter = new PrintWriter(outputStream, true);
printWriter.println("Hello, client!");
}
clients.remove(clientSocket);
System.out.println("Client disconnected: " + clientSocket.getInetAddress());
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
SocketServer socketServer = new SocketServer();
socketServer.start();
}
}
以上就是实现"Android 一个SocketServer 对应多个client"的完整步骤和代码示例。通过创建一个SocketServer对象并监听连接请求,接受客户端的连接请求,将连接的客户端Socket加入列表中,然后启动一个线程处理客户端的消息传输,最后在处理消息的过程中可以向客户端发送消息。通过这种方式,可以实现一个SocketServer对应多个client的功能。