本文实例讲述了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多线程通信问题深入了解
# 操作技巧
# 相关内容
# 第一个
# 说到
# 感兴趣
# 数据结构
# 给大家
# 要将
# 里去
# 最简单
# 更多关于
# 能再
# 都把
# 所述
# 做些
# 程序设计
# 就可以
# 单线程
# 有一个
相关文章:
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
如何构建满足综合性能需求的优质建站方案?
建站之星logo尺寸如何设置最合适?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在万网自助建站中设置域名及备案?
建站之星免费模板:自助建站系统与智能响应式一键生成
建站之星如何快速生成多端适配网站?
南京网站制作费用,南京远驱官方网站?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
建站主机解析:虚拟主机配置与服务器选择指南
建站VPS配置与SEO优化指南:关键词排名提升策略
网站制作软件免费下载安装,有哪些免费下载的软件网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
,柠檬视频怎样兑换vip?
建站为何优先选择香港服务器?
网站按钮制作软件,如何实现网页中按钮的自动点击?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何零基础开发自助建站系统?完整教程解析
常州自助建站费用包含哪些项目?
无锡营销型网站制作公司,无锡网选车牌流程?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何用好域名打造高点击率的自主建站?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
如何通过西部建站助手安装IIS服务器?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何快速搭建安全的FTP站点?
网站制作报价单模板图片,小松挖机官方网站报价?
高端建站三要素:定制模板、企业官网与响应式设计优化
建站之星如何助力网站排名飙升?揭秘高效技巧
如何快速生成凡客建站的专业级图册?
Java解压缩zip - 解压缩多个文件或文件夹实例
招贴海报怎么做,什么是海报招贴?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
宝塔面板如何快速创建新站点?
,制作一个手机app网站要多少钱?
C#如何使用XPathNavigator高效查询XML
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站之星上传入口如何快速找到?
如何通过NAT技术实现内网高效建站?
如何用PHP快速搭建CMS系统?
如何在IIS服务器上快速部署高效网站?
如何高效生成建站之星成品网站源码?
建站10G流量真的够用吗?如何应对访问高峰?
*请认真填写需求信息,我们会在24小时内与您取得联系。