我的应用程序在使用 ServerSocket
时出了问题。
我在应用程序的构造函数中创建了 ServerSocket
,并调用了套接字的构造函数来等待客户端连接。
问题是 accept()
方法会阻塞整个应用程序,直到有客户端连接。因此,我想问一下是否有替代方法可以在单独的线程中创建整个 ServerSocket
,并在我的主应用程序之外调用它的构造函数和 accept()
方法?
编辑:
感谢Olivier的建议,将 .accept() 方法放入一个可运行对象,并创建一个线程池来处理客户端连接。
现在这是我的代码:
public void start(){
final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
objectout = new ObjectOutputStream(clientSocket.getOutputStream());
clientProcessingPool.submit(new ClientTask(clientSocket,objectout));
}
} catch (IOException e) {
System.err.println("Accept failed.");
}
}
};
一切运行良好!谢谢!