首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
首页标签serversocket

#serversocket

如何在一个单独的线程中创建ServerSocket?

通常情况下,我使用N + 1个线程:一个用于ServerSocket,避免阻塞整个应用程序等待客户端连接; 和N个线程来处理客户端的请求,N是线程池的大小(我建议使用线程池来为每个客户端创建一个新线程)。 public class Server { public static void main(String[] args) { new Server().startServer(); } public void startServer() { final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10); Runnable serverTask = new Runnable() { @Override public void run() { try { ServerSocket serverSocket = new ServerSocket(8000); System.out.println("Waiting for clients to connect..."); while (true) { Socket clientSocket = serverSocket.accept(); clientProcessingPool.submit(new ClientTask(clientSocket)); } } catch (IOException e) { System.err.println("Unable to process client request"); e.printStackTrace(); } } }; Thread serverThread = new Thread(serverTask); serverThread.start(); } private class ClientTask implements Runnable { private final Socket clientSocket; private ClientTask(Socket clientSocket) { this.clientSocket = clientSocket; } @Override public void run() { System.out.println("Got a client !"); // Do whatever required to process the client's request try { clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } } ... 展开详请
领券