客户端:

public class MyChatClient {public static void main(String[] args) {try {InetAddress localHost = InetAddress.getLocalHost();String hostAddress = localHost.getHostAddress();System.out.println(hostAddress);Socket client = new Socket(hostAddress, 9090);//发送线程new Thread(() -> {OutputStream out = null;try {/* client.setTcpNoDelay(true);client.setSendBufferSize(20);*/out = client.getOutputStream();InputStream in = System.in;BufferedReader reader = new BufferedReader(new InputStreamReader(in));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));while (true) {String line = reader.readLine();if (line != null) {/*byte[] bb = line.getBytes();for (byte b : bb) {out.write(b);}out.flush();*/writer.write(line);writer.write("\n");writer.flush();}}} catch (IOException e) {e.printStackTrace();} finally {try {out.close();} catch (IOException e) {e.printStackTrace();}}}, "发送线程").start();//接收线程new Thread(() -> {InputStream inputStream = null;try {inputStream = client.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));// char[] data = new char[1024];while (true) {/* int num = reader.read(data);if (num>0){System.out.println(new String(data, 0, num));}else{client.close();break;}*/String dataline = reader.readLine(); //阻塞2if (null != dataline) {System.out.println(dataline);} else {client.close();break;}}System.out.println("客户端断开");} catch (IOException e) {e.printStackTrace();}}, "接收线程").start();for (; ; ) {}} catch (IOException e) {e.printStackTrace();}}
}

服务端

public class MyChatServer {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(9090);System.out.println("Port 9090 has been listening");ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 10, 1, TimeUnit.MINUTES, new LinkedBlockingDeque<>(10), new RejectedExecutionHandler() {@Overridepublic void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {System.out.println("连接已满");}});while (true) {Socket client = server.accept();// 接收线程threadPool.execute(() -> {Thread.currentThread().setName("接收线程");try (InputStream in = client.getInputStream()) {BufferedReader reader = new BufferedReader(new InputStreamReader(in));// char[] data = new char[1024];while (true) {/*int num = reader.read(data);if (num>0){System.out.println(new String(data, 0, num));}else{client.close();break;}*/// 阻塞获取数据String dataline = reader.readLine();if (null != dataline) {System.out.println(dataline);} else {client.close();break;}}System.out.println("客户端连接断开");client.close();} catch (IOException e) {e.printStackTrace();}});// 发送线程threadPool.execute(() -> {Thread.currentThread().setName("发送线程");OutputStream out = null;try {/*client.setSendBufferSize(20);client.setTcpNoDelay(true);*/out = client.getOutputStream();InputStream in = System.in;BufferedReader reader = new BufferedReader(new InputStreamReader(in));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out));while (true) {String line = reader.readLine();if (line != null) {/*byte[] bb = line.getBytes();for (byte b : bb) {out.write(b);}out.flush();*/writer.write(line);writer.write("\n");writer.flush();}}} catch (IOException e) {e.printStackTrace();}});}}
}

(PS:注释内容为用字节流进行传输,全部写到一个方法中有点乱可以自行抽调)

JAVA SOCKET实现全双工通信相关推荐

  1. java socket 全双工客户端_java socket实现全双工通信

    单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输. 如果 ...

  2. java socket 全双工_java socket实现全双工通信

    单工.半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工. 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输. 如果 ...

  3. 关于java Socket与C#通信编码问题小结

    客户端取出数据使用new String("消息".getBytes("GBK"),"UTF-8");进行转换 发送的时候使用PrintWri ...

  4. java与c++ socket通信_C++ socket 客户端与JAVA socket 服务端通信汗血宝马

    C++ socket 连接java 服务如果发送 packHeadLength+消息体 java 客户端代码 Socket socket = new Socket("127.0.0.1&qu ...

  5. Java Socket 全双工通信

    最初在认识上有这样的误区,认为只有在 netty,nio 这样的多路复用 IO 模型时,读写才不会相互阻塞,才可以实现高效的双向通信,但实际上,Java Socket 是全双工的:在任意时刻,线路上存 ...

  6. Java socket服务端

    本文主要讲解java socket服务端通信内容,服务端监听客户端,并且获取客户端的消息. 监听的主要代码是一个while死循环,因为需要实现持续监听.读者可重点阅读MySocketServer 类的 ...

  7. java socket简,javasocket简单示例

    简单Socket测试_计算机软件及应用_IT/计算机_专业资料.简单的聊天小测试 服务端 importjava.io.DataInputStream; importjava.io.DataOutput ...

  8. 一文了解websocket全双工通信java实现socket地址404问题解决

    websocket介绍 1.websocket介绍 1.1注解介绍 2.demo 2.1 后端代码 2.2 前端代码 2.3 效果 附录:socket地址404问题解决 1.websocket介绍 W ...

  9. java socket 全双工客户端_[Java教程]用socket模拟实现全双工通信

    [Java教程]用socket模拟实现全双工通信 0 2017-04-04 00:00:14 //源码下载 http://download.csdn.net/detail/qq_24054661/98 ...

最新文章

  1. vue 高阶面试题_高级Web前端工程师面试之Vue问题汇总解析
  2. referenced from 异常
  3. 简单的REST的框架实现
  4. Comet---“服务器推”技术实现
  5. Spring4.x(9)--Spring的Hibernate事务-XML
  6. Codeforces Round #467 (Div. 1): B. Sleepy Game(BFS+有向图判环)
  7. getch方法_C++中getch函数使用时注意事项
  8. Mac OSX 下破解软件的一般方法及过程、 mark一下
  9. H3C华三路由器nat避免生成null 0路由并解决nat需求
  10. 通过阅读饥荒代码理解树人机制
  11. 统计学简介之一——统计量
  12. canvas 实现图片局部模糊_HTML5 Canvas图片马赛克模糊动画
  13. 内存类型:UDIMM、RDIMM、LRDIMM
  14. 晶闸管整流桥matlab仿真,matlab仿真模型作业
  15. 计算机语言市场份额,21年7月编程语言排名:python上升迅速,others占比最高
  16. 如何使文章分栏脚注不分栏?
  17. 【MySQL】——mysql系列之参数调优
  18. 阿里数据库十年变迁,那些你不知道的二三事
  19. android 定位
  20. elasticsearch 深入 —— 全文检索

热门文章

  1. [其他产品]PCB板上的槽孔的作用
  2. JPQL(JPA的查询语句)
  3. 前端页面免费全屏截图技术实现
  4. vant上传图片压缩
  5. load Sdk stackflow.md
  6. iphone与android比较好,资深果粉告诉你,安卓比苹果或许更好用!
  7. 在向设计 ——眼里有诗 自在远方
  8. 五险一金的具体含义及社会保险查询
  9. CDMA系统中的用户识别卡(UIM)和空中激活技术(OTA)(转)
  10. successful note