java Socket(二)
上次做了一个java socket一对一通信的例子这次来写一个一对多的通信,这里我们使用java的多线程来实现
首先来看一下服务类
/** * */
package com.dnion.socket; import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; /** *************************************************************** * 项目名称:JavaThread * 程序名称:MultiJabberServer * 日期:2012-8-23 下午02:38:20 * 作者: * 模块: * 描述: * 备注: * ------------------------------------------------------------ * 修改历史 * 序号 日期 修改人 修改原因 * * 修改备注: * @version *************************************************************** */
public class MultiJabberServer { /** * 方法名:main * 描述: * 作者: * 日期:2012-8-23 下午02:38:20 * @param @param args * @return void */ public static void main(String[] args) { ServerSocket s = null; Socket socket = null; try { s = new ServerSocket(8080); //等待新请求、否则一直阻塞 while(true){ socket = s.accept(); System.out.println("socket:"+socket); new ServeOneJabbr(socket); } } catch (Exception e) { try { socket.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }finally{ try { s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
接着我们要写一个服务端响应请求的类也就是一个socket
/** * */
package com.dnion.socket; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket; /** *************************************************************** * 项目名称:JavaThread * 程序名称:ServeOneJabbr * 日期:2012-8-23 下午02:34:13 * 作者: * 模块: * 描述: * 备注: * ------------------------------------------------------------ * 修改历史 * 序号 日期 修改人 修改原因 * * 修改备注: * @version *************************************************************** */
public class ServeOneJabbr extends Thread{ private Socket socket = null; private BufferedReader br = null; private PrintWriter pw = null; public ServeOneJabbr(Socket s){ socket = s; try { br = new BufferedReader(new InputStreamReader(socket.getInputStream())); pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); start(); } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { while(true){ String str; try { str = br.readLine(); if(str.equals("END")){ br.close(); pw.close(); socket.close(); break; } System.out.println("Client Socket Message:"+str); pw.println("Message Received"); pw.flush(); } catch (Exception e) { try { br.close(); pw.close(); socket.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } } }
接下来利用我们上一次的客户端socket
/** * */
package com.dnion.socket; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket; /** *************************************************************** * 项目名称:JavaThread 程序名称:JabberClient 日期:2012-8-23 下午01:47:12 * 作者: * 模块: * 描述: * 备注: * ------------------------------------------------------------ * 修改历史 * 序号 * 日期 * 修改人 * 修改原因 * 修改备注: * * @version *************************************************************** */
public class JabberClient { /** * 方法名:main 描述: 作者:白鹏飞 日期:2012-8-23 下午01:47:12 * * @param @param args * @return void */ public static void main(String[] args) { Socket socket = null; BufferedReader br = null; PrintWriter pw = null; try { //客户端socket指定服务器的地址和端口号 socket = new Socket("127.0.0.1", JabberServer.PORT); System.out.println("Socket=" + socket); //同服务器原理一样 br = new BufferedReader(new InputStreamReader( socket.getInputStream())); pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter( socket.getOutputStream()))); for (int i = 0; i < 10; i++) { pw.println("howdy " + i); pw.flush(); String str = br.readLine(); System.out.println(str); } pw.println("END"); pw.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { System.out.println("close......"); br.close(); pw.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
这样一个简单地多客户端响应socket就成了
每次有一个请求发送过来服务端都会新建一个线程来单独服务。
java Socket(二)相关推荐
- java socket 二次发送_发过2次帖子,都没有了,再发。JAVA中SOCKET通信中的数据压缩问题...
通信中要发大批量数据,发送前想进行压缩,发送完一段数据后要进行验证,然后才能继续发.我使用GZipInputStream和GZipOutputStream进行处理,但发送完一段数据后,调用zipout ...
- 基于Java的RDMA高性能通信库(二):Java Socket Over RDMA
目录 1.Comparing JSOR with Java TCP communications 2.Comparing JSOR to Java Sockets Direct Protocol (S ...
- java Socket实现简单在线聊天(二)
出处:http://blog.csdn.net/tuzongxun 接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使 ...
- [转载]Java Socket实战之二 多线程通信
上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后 续Clien ...
- java通信二:利用Socket实现聊天室功能
最近研究了下java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人. 目录结构: ChatClient: package com.panda. ...
- 简单java socket_基于Java Socket实现一个简易在线聊天功能(一)
最近做了一个项目,其中有一个在线网页交流的需求,好久没写代码了,手都生疏了,于是先写demo练练手,分享到脚本之家平台,以此做个记录,方便自己和大家使用. 先给大家说下实现步骤分这样几大步: 1.使用 ...
- Java Socket实战之四 传输压缩对象
2019独角兽企业重金招聘Python工程师标准>>> 本文地址:http://blog.csdn.net/kongxx/article/details/7259834 Java S ...
- Java Socket编程----通信是这样炼成的
转载自 Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socke ...
- linux java socket编程_深入学习socket网络编程,以java语言为例
了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...
最新文章
- Field、CopyField、DynamicField的一些简介,用法
- python量化投资必背代码-量化投资:用Python实现金融数据的获取与整理
- 基于zookeeper的高可用集群
- SolrJ搜索功能切换到集群
- c语言循环结构程序设计视频,第13讲:循环结构程序设计1
- linux php和java环境变量配置_Linux下Java环境变量的安装与配置
- Centos7 关闭防火墙(Firewalld ),使用防火墙(iptables)
- 吴钩:打开宋代的“隐藏玩法”
- tidyr | 对数据框分行或分列进行嵌套操作
- java热门框架_java今年最流行的3大框架
- chrome plugins
- Spine 1.73+ 和谐版
- stm32的ISP下载
- 在Windows上将Ctrl+C信号发送到Python subprocess子进程
- Bootstrap框架
- 正则验证手机号码和邮箱格式
- deviceOrientation简介
- 利用nginx搭建http和rtmp协议的流媒体服务器,用nginx搭建http/rtmp/hls协议的MP4/FLV流媒体服务器...
- 商务统计_4 用图表演示数据 - 频数分布
- OpenSearch 简单学习
热门文章
- nodejs中使用worker_threads来创建新的线程
- hdu 4150 Powerful Incantation
- Vue指令篇_v-bind
- 【简洁代码】1053 住房空置率 (20分)_22行代码AC
- 9行代码满分 【C语言】 L1-062 幸运彩票 (15分)
- Condition的await()方法
- vue 左右滑动菜单_Vue实现左右菜单联动实现代码
- python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...
- 运筹学广泛的使用计算机,运筹学笔记
- 人工智能不是计算机领域能学么,华南理工大学《高级人工智能》考试真题1