上次做了一个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(二)相关推荐

  1. java socket 二次发送_发过2次帖子,都没有了,再发。JAVA中SOCKET通信中的数据压缩问题...

    通信中要发大批量数据,发送前想进行压缩,发送完一段数据后要进行验证,然后才能继续发.我使用GZipInputStream和GZipOutputStream进行处理,但发送完一段数据后,调用zipout ...

  2. 基于Java的RDMA高性能通信库(二):Java Socket Over RDMA

    目录 1.Comparing JSOR with Java TCP communications 2.Comparing JSOR to Java Sockets Direct Protocol (S ...

  3. java Socket实现简单在线聊天(二)

    出处:http://blog.csdn.net/tuzongxun 接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使 ...

  4. [转载]Java Socket实战之二 多线程通信

    上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,当第一个Client连接后就占据了这个位置,后 续Clien ...

  5. java通信二:利用Socket实现聊天室功能

    最近研究了下java socket通信基础,利用代码实现了一个简单的多人聊天室功能,现把代码共享下,希望能帮到有兴趣了解的人. 目录结构: ChatClient: package com.panda. ...

  6. 简单java socket_基于Java Socket实现一个简易在线聊天功能(一)

    最近做了一个项目,其中有一个在线网页交流的需求,好久没写代码了,手都生疏了,于是先写demo练练手,分享到脚本之家平台,以此做个记录,方便自己和大家使用. 先给大家说下实现步骤分这样几大步: 1.使用 ...

  7. Java Socket实战之四 传输压缩对象

    2019独角兽企业重金招聘Python工程师标准>>> 本文地址:http://blog.csdn.net/kongxx/article/details/7259834 Java S ...

  8. Java Socket编程----通信是这样炼成的

    转载自 Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socke ...

  9. linux java socket编程_深入学习socket网络编程,以java语言为例

    了解java的socket编程与Linux Socket API之间的关系 一.java的网络编程 1.socket原理 socket通信就是通过IP和端口号将两台主机建立连接,提供通信.主机A的应用 ...

最新文章

  1. Field、CopyField、DynamicField的一些简介,用法
  2. python量化投资必背代码-量化投资:用Python实现金融数据的获取与整理
  3. 基于zookeeper的高可用集群
  4. SolrJ搜索功能切换到集群
  5. c语言循环结构程序设计视频,第13讲:循环结构程序设计1
  6. linux php和java环境变量配置_Linux下Java环境变量的安装与配置
  7. Centos7 关闭防火墙(Firewalld ),使用防火墙(iptables)
  8. 吴钩:打开宋代的“隐藏玩法”
  9. tidyr | 对数据框分行或分列进行嵌套操作
  10. java热门框架_java今年最流行的3大框架
  11. chrome plugins
  12. Spine 1.73+ 和谐版
  13. stm32的ISP下载
  14. 在Windows上将Ctrl+C信号发送到Python subprocess子进程
  15. Bootstrap框架
  16. 正则验证手机号码和邮箱格式
  17. deviceOrientation简介
  18. 利用nginx搭建http和rtmp协议的流媒体服务器,用nginx搭建http/rtmp/hls协议的MP4/FLV流媒体服务器...
  19. 商务统计_4 用图表演示数据 - 频数分布
  20. OpenSearch 简单学习

热门文章

  1. nodejs中使用worker_threads来创建新的线程
  2. hdu 4150 Powerful Incantation
  3. Vue指令篇_v-bind
  4. 【简洁代码】1053 住房空置率 (20分)_22行代码AC
  5. 9行代码满分 【C语言】 L1-062 幸运彩票 (15分)
  6. Condition的await()方法
  7. vue 左右滑动菜单_Vue实现左右菜单联动实现代码
  8. python多分类混淆矩阵代码_深度学习自学记录(3)——两种多分类混淆矩阵的Python实现(含代码)...
  9. 运筹学广泛的使用计算机,运筹学笔记
  10. 人工智能不是计算机领域能学么,华南理工大学《高级人工智能》考试真题1