一、服务端

  1. package com.czhappy.hello.socket;
  2.  
  3. import java.io.IOException;
  4. import java.net.InetAddress;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;
  7.  
  8. public class Server {
  9. public static void main(String[] args) {
  10. //创建ServerSocket示例,指定端口,侦听
  11. try {
  12. ServerSocket serverSocket = new ServerSocket(8888);
  13. System.out.println("服务即将启动,等待客户端连接");
  14. //记录客户端的数量
  15. int count = 0;
  16. Socket socket = null;
  17. while(true){
  18. //开始监听,等待客户端的连接
  19. socket = serverSocket.accept();
  20. ServerThread serverThread = new ServerThread(socket);
    serverThread.setPriority(4);//设置线程的优先级,范围是:[1,10],默认为5
  21. serverThread.start();
  22. count++;
  23. System.out.println("客户端的数量="+count);
  24. InetAddress address = socket.getInetAddress();
  25. System.out.println("当前客户端的IP地址为:"+address.getHostAddress());
  26. }
  27. } catch (IOException e) {
  28. // TODO Auto-generated catch block
  29. e.printStackTrace();
  30. }
  31. }
  32.  
  33. }
  1. package com.czhappy.hello.socket;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStream;
  8. import java.io.PrintWriter;
  9. import java.io.UnsupportedEncodingException;
  10. import java.net.Socket;
  11.  
  12. /**
  13. * 服务器线程处理类
  14. * @author Administrator
  15. *
  16. */
  17. public class ServerThread extends Thread{
  18.  
  19. Socket socket = null;
  20.  
  21. public ServerThread(Socket socket){
  22. this.socket = socket;
  23. }
  24.  
  25. public void run() {
  26. InputStream is = null;
  27. InputStreamReader isr = null;
  28. BufferedReader br = null;
  29. OutputStream os = null;
  30. PrintWriter pw = null;
  31. try {
  32. //获取字节输入流
  33. is = socket.getInputStream();
  34. //将字节输入流转化为字符输入流
  35. isr = new InputStreamReader(is, "utf-8");
  36. //为字符输入流添加缓冲
  37. br = new BufferedReader(isr);
  38. String data = br.readLine();
  39. while(data!=null){
  40. System.out.println("我是服务器,客户端说:"+data);
  41. data = br.readLine();
  42. }
  43. //关闭输入流
  44. socket.shutdownInput();
  45. //获取输出流,响应客户端请求
  46. os = socket.getOutputStream();
  47. pw = new PrintWriter(os);
  48. pw.write("欢迎您!");
  49. pw.flush();
  50. } catch (UnsupportedEncodingException e) {
  51. // TODO Auto-generated catch block
  52. e.printStackTrace();
  53. } catch (IOException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. }finally{
  57. try {
  58. if(pw!=null){
  59. pw.close();
  60. }
  61. if(os!=null){
  62. os.close();
  63. }
  64. if(br!=null){
  65. br.close();
  66. }
  67. if(isr!=null){
  68. isr.close();
  69. }
  70. if(is!=null){
  71. is.close();
  72. }
  73. if(socket!=null){
  74. socket.close();
  75. }
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }
  79. }
  80.  
  81. }
  82.  
  83. }

二、客户端

  1. package com.czhappy.hello.socket;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStream;
  8. import java.io.PrintWriter;
  9. import java.net.Socket;
  10. import java.net.UnknownHostException;
  11.  
  12. public class Client {
  13.  
  14. public static void main(String[] args) {
  15. try {
  16. //创建客户端Socket,指定服务器地址和端口
  17. Socket socket = new Socket("192.168.0.45", 8888);
  18. //获取输出流,向服务器发送消息
  19. OutputStream os = socket.getOutputStream();//字节输出流
  20. PrintWriter pw = new PrintWriter(os);//将输出流包装成打印流
  21. pw.write("用户名:admin;密码:123");
  22. pw.flush();
  23. socket.shutdownOutput();//关闭输出流
  24. //获取输入流,读取服务器端响应信息
  25. InputStream is = socket.getInputStream();
  26. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  27. String data = br.readLine();
  28. while(data!=null){
  29. System.out.println("我是客户端,服务器说:"+data);
  30. data = br.readLine();
  31. }
  32.  
  33. br.close();
  34. is.close();
  35. pw.close();
  36. os.close();
  37. socket.close();
  38. } catch (UnknownHostException e) {
  39. // TODO Auto-generated catch block
  40. e.printStackTrace();
  41. } catch (IOException e) {
  42. // TODO Auto-generated catch block
  43. e.printStackTrace();
  44. }
  45. }
  46.  
  47. }

三、测试结果

需要先启动服务端,再启动客户端

服务端运行结果:

客户端运行结果:

java多线程实现多客户端socket通信的更多相关文章

  1. Java与C之间的socket通信

    最近正在开发一个基于指纹的音乐检索应用,算法部分已经完成,所以尝试做一个Android App.Android与服务器通信通常采用HTTP通信方式和Socket通信方式.由于对web服务器编程了解较少 ...

  2. Java多线程-同步:synchronized 和线程通信:生产者消费者模式

    大家伙周末愉快,小乐又来给大家献上技术大餐.上次是说到了Java多线程的创建和状态|乐字节,接下来,我们再来接着说Java多线程-同步:synchronized 和线程通信:生产者消费者模式. 一.同 ...

  3. java多线程实现TCP网络Socket编程(C/S通信)

    目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...

  4. Java多线程中的wait/notify通信模式

    前言 最近在看一些JUC下的源码,更加意识到想要学好Java多线程,基础是关键,比如想要学好ReentranLock源码,就得掌握好AQS源码,而AQS源码中又有很多Java多线程经典的一些应用:再比 ...

  5. Java多线程中线程间的通信

    一.使用while方式来实现线程之间的通信 package com.ietree.multithread.sync; import java.util.ArrayList; import java.u ...

  6. Java多线程编程-线程之间的通信

    转载自:这里 学习了基础的线程知识 看到了 线程之间的通信 线程之间有哪些通信方式呢? 1.同步 这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信. public ...

  7. java 多线程使用方法及Socket的使用

    public class newThread implements Runnable{ public void run(){ dosome(); } public void dosome(){ Sys ...

  8. java 多线程 synchronized与lock的通信机制等问题,结合相应实例说明

    1. 利用多线程实现如下需求: 写两个线程,一个线程打印1~52,另一个线程打印A~Z,打印顺序是12A34B...5152Z: 2. 使用synchronized 实现 public class T ...

  9. java多线程同步以及线程间通信详解&消费者生产者模式&死锁&Thread.join()(多线程编程之二)

    本篇我们将讨论以下知识点: 1.线程同步问题的产生 什么是线程同步问题,我们先来看一段卖票系统的代码,然后再分析这个问题: package com.zejian.test; /** * @author ...

随机推荐

  1. c语言冒泡排序算法

    案例一: #include <stdio.h> int main(void){ int a[5]; printf("please input sort number:" ...

  2. (27)打鸡儿教你Vue.js

    v-for 数组参数的顺序 当含有index时,以前传递的参数顺序是: (index, value).现在(value, index) ready替换使用新的mounted钩子代替,通过使用mount ...

  3. OpenStack Restful API框架介绍

    1  pecan框架介绍 1.1  什么是pecan pecan是一个轻量级的python web框架,最主要的特点是提供了简单的配置即可创建一个wsgi对象并提供了基于对象的路由方式. 主要提供的功 ...

  4. 安装pdo_dblib扩展连接SQLserver

    1.先得安装freetdswget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.1.5.tar.gztar zxvf freetds-1.1. ...

  5. P1041 传染病控制——暴力遍历所有相同深度的节点

    P1041 传染病控制 说实话这种暴力我还是头一次见,每次病毒都会往下传染一层: 数据范围小,我们可以直接枚举当前层保护谁就好了: 用vector 记录相同层数的节点:维护已经断了的点: 如果超出最底 ...

  6. 小程序的基本原生js使用

    1.点击事件 <a data-current="{{setting.current}}" bindtap="clickcurrent" style=&qu ...

  7. LDAP服务端 - 调研

    一.服务端实现 1.OpenLdap 2.ApacheDS 二.OpenLdap 1.https://segmentfault.com/a/1190000014683418 2.https://www ...

  8. java.lang.ClassNotFoundException: org.apache.jsp.error_jsp

    缺少jar包 第一个:standard-1.1.2.jar 第二个:jstl-1.2.jar

  9. c语言程序课程设计题目

    <C语言程序设计>课程设计课题表 一.A类 .职工信息管理系统设计 职工信息包括职工号.姓名.性别.年龄.学历.工资.住址.电话等(职工号不重复).试设计一职工信息管理系统,使之能提供以下 ...

  10. 卸载node和npm

    sudo npm uninstall npm -g yum remove nodejs npm -y