Java Socket实现多线程通信功能示例
发布时间 - 2026-01-11 01:59:45 点击率:次本文实例讲述了Java Socket实现多线程通信功能的方法。分享给大家供大家参考,具体如下:

前面的文章《Java Socket实现单线程通信的方法示例》说到怎样写一个最简单的Java Socket通信,但是文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后续Client不能再继续连接,所以需要做些改动,当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。代码如下:
package com.googlecode.garbagecan.test.socket.sample2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);
while (true) {
Socket socket = server.accept();
invoke(socket);
}
}
private static void invoke(final Socket client) throws IOException {
new Thread(new Runnable() {
public void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream());
while (true) {
String msg = in.readLine();
System.out.println(msg);
out.println("Server received " + msg);
out.flush();
if (msg.equals("bye")) {
break;
}
}
} catch(IOException ex) {
ex.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {}
try {
out.close();
} catch (Exception e) {}
try {
client.close();
} catch (Exception e) {}
}
}
}).start();
}
}
下面是Client程序代码:
package com.googlecode.garbagecan.test.socket.sample2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MyClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 10000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String msg = reader.readLine();
out.println(msg);
out.flush();
if (msg.equals("bye")) {
break;
}
System.out.println(in.readLine());
}
socket.close();
}
}
测试,首先运行MyServer类,然后运行两个MyClient类,然后分别在每个MyClient的提示符下输入字符串,就可以看到Server可以分别接收处理每个Client的请求了。
更多关于java相关内容感兴趣的读者可查看本站专题:《Java Socket编程技巧总结》、《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
# Java
# Socket
# 多线程
# 通信
# Java多线程通信:交替打印ABAB实例
# Java多线程通信wait()和notify()代码实例
# Java多线程通信实现方式详解
# Java多线程深入理解
# Java多线程通信问题深入了解
# 操作技巧
# 相关内容
# 第一个
# 说到
# 感兴趣
# 数据结构
# 给大家
# 要将
# 里去
# 最简单
# 更多关于
# 能再
# 都把
# 所述
# 做些
# 程序设计
# 就可以
# 单线程
# 有一个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速完成中国万网建站详细流程?
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
如何在Windows 2008云服务器安全搭建网站?
Laravel如何发送系统通知?(Notification渠道示例)
,南京靠谱的征婚网站?
Laravel如何配置和使用缓存?(Redis代码示例)
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
香港服务器租用每月最低只需15元?
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
如何获取PHP WAP自助建站系统源码?
长沙企业网站制作哪家好,长沙水业集团官方网站?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
奇安信“盘古石”团队突破 iOS 26.1 提权
如何在企业微信快速生成手机电脑官网?
轻松掌握MySQL函数中的last_insert_id()
Bootstrap整体框架之JavaScript插件架构
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
敲碗10年!Mac系列传将迎来「触控与联网」双革新
Laravel集合Collection怎么用_Laravel集合常用函数详解
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何在阿里云通过域名搭建网站?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何快速生成ASP一键建站模板并优化安全性?
如何用免费手机建站系统零基础打造专业网站?
微信小程序 wx.uploadFile无法上传解决办法
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
如何在Tomcat中配置并部署网站项目?
php485函数参数是什么意思_php485各参数详细说明【介绍】
如何快速查询域名建站关键信息?
教你用AI润色文章,让你的文字表达更专业
如何在建站之星网店版论坛获取技术支持?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
Laravel用户密码怎么加密_Laravel Hash门面使用教程
iOS正则表达式验证手机号、邮箱、身份证号等
jQuery 常见小例汇总
如何在腾讯云服务器上快速搭建个人网站?
javascript读取文本节点方法小结
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
详解阿里云nginx服务器多站点的配置
如何在云主机快速搭建网站站点?
如何确保西部建站助手FTP传输的安全性?
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
C++时间戳转换成日期时间的步骤和示例代码
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
Java类加载基本过程详细介绍

