当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。

具体代码如下:

  1. package com.googlecode.garbagecan.test.socket.sample2;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.PrintWriter;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;
  8. public class MyServer {
  9. public static void main(String[] args) throws IOException {
  10. ServerSocket server = new ServerSocket(10000);
  11. while (true) {
  12. Socket socket = server.accept();
  13. invoke(socket);
  14. }
  15. }
  16. private static void invoke(final Socket client) throws IOException {
  17. new Thread(new Runnable() {
  18. public void run() {
  19. BufferedReader in = null;
  20. PrintWriter out = null;
  21. try {
  22. in = new BufferedReader(new InputStreamReader(client.getInputStream()));
  23. out = new PrintWriter(client.getOutputStream());
  24. while (true) {
  25. String msg = in.readLine();
  26. System.out.println(msg);
  27. out.println("Server received " + msg);
  28. out.flush();
  29. if (msg.equals("bye")) {
  30. break;
  31. }
  32. }
  33. } catch(IOException ex) {
  34. ex.printStackTrace();
  35. } finally {
  36. try {
  37. in.close();
  38. } catch (Exception e) {}
  39. try {
  40. out.close();
  41. } catch (Exception e) {}
  42. try {
  43. client.close();
  44. } catch (Exception e) {}
  45. }
  46. }
  47. }).start();
  48. }
  49. }

下面是Client程序代码:

  1. package com.googlecode.garbagecan.test.socket.sample2;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.io.PrintWriter;
  5. import java.net.Socket;
  6. public class MyClient {
  7. public static void main(String[] args) throws Exception {
  8. Socket socket = new Socket("localhost", 10000);
  9. BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  10. PrintWriter out = new PrintWriter(socket.getOutputStream());
  11. BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
  12. while (true) {
  13. String msg = reader.readLine();
  14. out.println(msg);
  15. out.flush();
  16. if (msg.equals("bye")) {
  17. break;
  18. }
  19. System.out.println(in.readLine());
  20. }
  21. socket.close();
  22. }
  23. }

测试,首先运行MyServer类,然后运行两个MyClient类,然后分别在每个MyClient的提示符下输入字符串,就可以看到Server可以分别接收处理每个Client的请求了。

用Thread实现socket多线通讯相关推荐

  1. Android 通过Socket 和服务器通讯

    Android 通过Socket 和服务器通讯,是一种比较常用的通讯方式,时间比较紧,说下大致的思路,希望能帮到使用socket 进行通信的人 (1)开启一个线程发送消息    SocketOutpu ...

  2. Androidpcm格式音频编解码及播放,socket文件传输通讯,soundTouch变声框架 合成的一款仿微信语音按住说话的demo

    pcm格式音频编解码及播放,socket文件传输通讯,soundTouch变声框架 合成的一款仿微信语音按住播放的demo 效果:   -------------- 代码: MainActivity ...

  3. winform中socket实现即时通讯(仿qq聊天)

    C# winform中使用socket实现即时通讯,仿照qq聊天,此为服务器端代码,亲测可行,代码如下 using System; using System.Collections.Generic; ...

  4. python socket 与unity通讯来调用photoshop批量处理

    python socket 与unity通讯,通过unity发送消息来调用photoshop批量处理,photoshop批量处理完成完成后在发送complete完成通知给Unity python部分代 ...

  5. linux系统udp通信程序,Linux UDP socket编程(UDP通讯模型) | C/C++程序员之家

    Linux UDP socket编程(UDP通讯模型): UDPClient + UDPService. Linux下大多数网络程序都是基于TCP的,很少基于UDP,简单的通讯模型如下,开发时候备用! ...

  6. C#Socket同步异步通讯总结笔记

    同步套接字通信 Socket支持下的网上点对点的通信 服务端实现监听连接,客户端实现发送连接请求,建立连接后进行发送和接收数据的功能 服务器端建立一个socket,设置好本机的ip和监听的端口与soc ...

  7. Flash Socket 的基本通讯协议流程例子

    Flash Socket 的基本通讯协议流程例子 分类: flash builder2012-05-09 09:30 13人阅读 评论(0) 收藏 举报 原文:http://www.sujun.org ...

  8. Physical CPU、Logical CPU、Core、Thread、Socket

    Differences between physical CPU vs logical CPU vs Core vs Thread vs Socket 物理CPU (physical CPU). 逻辑 ...

  9. 远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转 服务器源代码,socket多线程并发通讯

    远程PLC监控调试,PLC通用中转服务器,多客户端tcp中转 服务器源代码,socket多线程并发通讯, 对接多路plc串口WIFI模块实现远程调试程序.支持各种串口服务器以及tcp以太网转发器硬件.

最新文章

  1. ATS中开启Refer防盗链功能
  2. [CODEVS] 2189 数字三角形W
  3. Xamarin XAML语言教程基本视图ContentView
  4. 项目编译后,classses文件中没有对应的xml文件,一般是编译后mapper类对应的xml文件没有生成
  5. 使用rancher-2.5.5部署单节点kubernetes集群
  6. PyTorch 1.9发布!移动端疯狂更新
  7. 2018第一场多校 -补题
  8. ​给前端开发者的 14 个 JavaScript 代码优化建议
  9. 想要组装一台 RISC-V PC?试试这个 RISC-V 开发板
  10. 2020 年的第一天,程序员鸭血粉丝又碰上生产事故
  11. Linux忘记root密码重置密码方法
  12. php获取客户端的真实IP的方法
  13. 微信抖音工具箱头像制作壁纸小程序带改图制图流量主功能搭建动态社群人脉助手
  14. wordpress footer.php,wordpress的get_footer( )函数功能详解
  15. linux查看文件打开限制,Linux最大文件打开数使用经验详解
  16. python二分查找时间复杂度_时间复杂度 二分查找
  17. LinkedList面试要点总结
  18. 采蘑菇电脑c语言,英菲尼迪终于升级英菲尼迪Q50L,内行人告诉你怎么选还配备主动降噪、胎压显示!凯美瑞都比不上它! 早买早享受...
  19. openmv一些常见问题与心得总结
  20. Java以毫秒为单位返回秒表记录的流逝时间(即求一个程序段的运行时间)

热门文章

  1. 【Java文件操作(七)】序列化:将自定义类写入文件
  2. Spring5参考指南:AOP代理
  3. 解决Mysql读写分离数据延迟
  4. Leet Code OJ 102. Binary Tree Level Order Traversal [Difficulty: Easy]
  5. 编译原理习题(含答案)——1 绪论——MOOC哈工大陈鄞配套, 1 编译是对()。 A. 机器语言的执行 B. 汇编语言的翻译
  6. php ajax搜索,PHP 与AJAX
  7. php注解rbac,PHP的RBAC权限详解
  8. java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘
  9. 静态ip和动态ip的区别_动态IP和静态IP有哪些区别?
  10. 编写字符串反转函数 .