ServerSocket类的accept()方法会一直阻塞直到有新的客户端连接到服务端,此时如何终止上述线程
时间: 2024-02-25 10:54:21 浏览: 46
ServerSocket的accept()方法是一个阻塞方法,它会一直等待直到有新的客户端连接到服务端。如果需要终止上述线程,一种简单的方法是在服务端代码中使用一个标志位来控制循环,当标志位为false时,退出循环,停止监听连接请求。
例如,在上述代码中,可以添加一个boolean类型的变量isRunning来控制循环,当isRunning为false时,退出循环,停止监听连接请求。可以在需要终止线程的地方将isRunning设置为false。
以下是修改后的代码示例:
```java
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private static boolean isRunning = true;
public static void main(String[] args) {
try {
// 创建ServerSocket对象,监听指定端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务端已启动,等待客户端连接...");
while (isRunning) {
// 接受客户端连接
Socket socket = serverSocket.accept();
System.out.println("客户端已连接,IP地址为:" + socket.getInetAddress());
// TODO: 处理客户端请求
// 关闭连接
socket.close();
}
// 关闭ServerSocket
serverSocket.close();
System.out.println("服务端已停止");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void stop() {
isRunning = false;
}
}
```
在上述代码中,添加了一个stop()方法来停止服务端。调用stop()方法后,isRunning变量会被设置为false,循环会退出,ServerSocket会被关闭,服务端就会停止监听连接请求。