多线程TCP网络程序设计与开发实践
时间:2026-08-15 | 作者:骑光打字机 | 阅读:0上一小节通过两个案例,分别把服务器端程序和客户端程序跑通了。
客户端一旦向服务器端发起请求,服务器端就会从阻塞状态中恢复过来,继续完成后续执行。
实际上,很多服务器端程序并不是只服务一个应用,而是要同时响应多个访问请求。
比如门户网站,往往会被大量用户同时打开、同时操作。因此,这类服务器端通常都会采用多线程方式来处理并发访问。
接下来结合一个图例,看看多个用户访问同一台服务器时的情况,如图1所示。
图1 多个客户端访问服务器端
多客户端访问服务器端的基本方式
在图1中,服务器端为每个客户端创建一个对应的Socket对象。
同时,服务器端还会开启一个新的线程,使两个Socket建立专线进行通信。
服务端程序改进
接下来根据图19所示的多线程通信方式对服务端程序进行改进,如文件1所示。
文件1 ThreadTCPServer.ja va
1 import ja va.io.*;
2 import ja va.net.*;
3 // TCP服务端
4 public class ThreadTCPServer {
5 public static void main(String[] args) throws Exception {
6 // 创建一个指定端口号为7788的服务器端ServerSocket对象
7 ServerSocket serverSocket = new ServerSocket(7788);
8 // 使用while循环不停的接收客户端发送的请求
9 while (true) {
10 // 调用ServerSocket的accept()方法与客户端建立连接
11 Socket client = serverSocket.accept();
12 // 针对每一个客户端请求创建一个线程进行连接管理
13 Thread thread = new Thread(() -> {
14 try {
15 // 获取当前连接的客户端所在端口号
16 int port =client.getPort();
17 System.out.println("与端口号为"+port+"的客户端连接成功!");
18 OutputStream os = client.getOutputStream();
19 os.write(("服务器端向客户端做出响应!").getBytes());
20 Thread.sleep(5000);
21 System.out.println("结束与客户端数据交互");
22 // 关闭流和Socket连接
23 os.close();
24 client.close();
25 } catch (Exception e) {
26 e.printStackTrace();
27 }
28 });
29 // 执行线程类,与客户端进行数据交互
30 thread.start();
31 }
32 }
33 }
程序实现思路
文件1中,使用多线程的方式创建了一个服务器端程序。
程序通过在while循环中调用accept()方法,持续接收客户端发送的请求。
当与客户端建立连接后,就会为每个客户端开启一个新的线程。
这样,每个线程都会与一个客户端建立一对一连接,从而进行数据交互。
多线程能力测试
要判断服务器端程序是不是已经具备多线程能力,最直接的办法就是实际跑一遍。
先启动服务端程序(文件1);
然后连续启动三个客户端程序(上一节中的文件2);
让它们依次与服务端建立连接并完成数据交互。
测试时可以看到,第一个客户端一运行,服务端就会立即开始处理数据。
同时,服务端会输出“与端口号为56016的客户端连接成功!”这样的提示信息。
这里的端口号是随机分配的,实际显示可能并不一样。
接着再启动第二个和第三个客户端,服务端同样会迅速响应。
与此同时,这三个已经启动的客户端也都能正常收到来自服务端的返回信息。
整体效果如图2所示。
图2 运行结果
结论
从图2可以看出,程序通过多线程的方式,实现多个用户同时对同一个服务器端程序的访问。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15

