腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
首页
标签
serversocket
#
serversocket
关注
专栏文章
(7)
技术视频
(0)
互动问答
(1)
如何在一个单独的线程中创建ServerSocket?
1
回答
serversocket
、
客户端
、
连接
、
线程
当巨浪把
it
通常情况下,我使用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(); } } } } ...
展开详请
赞
0
收藏
0
评论
0
分享
通常情况下,我使用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(); } } } }
热门
专栏
小雨的CSDN
169 文章
24 订阅
LieBrother
62 文章
15 订阅
石头岛
315 文章
30 订阅
冷环渊的全栈工程师历程
159 文章
24 订阅
姜同学
75 文章
14 订阅
热门
标签
更多标签
ICP备案
云服务器
对象存储
云点播
即时通信 IM
实时音视频
DNS 解析 DNSPod
内容分发网络 CDN
人脸识别
私有网络
python
java
javascript
人工智能
android
领券