位置:首页 > Java > 多线程TCP网络程序设计与开发实践

多线程TCP网络程序设计与开发实践

时间:2026-08-15  |  作者:骑光打字机  |  阅读:0

上一小节通过两个案例,分别把服务器端程序和客户端程序跑通了。

客户端一旦向服务器端发起请求,服务器端就会从阻塞状态中恢复过来,继续完成后续执行。

实际上,很多服务器端程序并不是只服务一个应用,而是要同时响应多个访问请求。

比如门户网站,往往会被大量用户同时打开、同时操作。因此,这类服务器端通常都会采用多线程方式来处理并发访问。

接下来结合一个图例,看看多个用户访问同一台服务器时的情况,如图1所示。

多线程TCP网络程序设计与开发实践_wishdown.com

图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所示。

多线程TCP网络程序设计与开发实践_wishdown.com

图2 运行结果

结论

从图2可以看出,程序通过多线程的方式,实现多个用户同时对同一个服务器端程序的访问。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多