网络编程复习(二):JDK1.5之前的伪异步BIO编程
发布日期:2021-11-13 10:21:48
浏览次数:11
分类:技术文章
本文共 3871 字,大约阅读时间需要 12 分钟。
在JDK1.5之前并没有提供NIO非阻塞异步通信,在这里说一下什么是BIO:就是同步阻塞形式的通信模式,那么什么是NIO,就是同步非阻塞通信模式,同时,在JDK1.7之后,支持异步非阻塞通信模式,就是所说的NIO2.0.那么是怎么实现多个client连接服务器的呢?答案是使用的是伪异步方式,即自定义线程池加队列方式,下面看看代码:
client类:与上一篇没有任何变化
package 网络编程_最原始BIO2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class Client { public static void main(String[] args) { PrintWriter writer = null; BufferedReader reader = null; Socket client = null; try { client = new Socket("127.0.0.1", 8888); writer = new PrintWriter(client.getOutputStream(), true);//该地方必须加true,设置为自动刷新 reader = new BufferedReader(new InputStreamReader(client.getInputStream())); writer.println("接收客户端发送请求"); System.out.println("请求已经发出"); String body = reader.readLine(); System.out.println(body); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } if (writer != null) { writer.close(); } if (client != null) { try { reader.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } client = null; } } }}server类:
package 网络编程_最原始BIO2;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import 网络编程_最原始.HanderSocket;public class Server { static ServerSocket server = null; public static void main(String[] args) { try { server = new ServerSocket(8888); System.out.println("server start..."); while(true){ Socket socket = server.accept(); new HanderPoolExecuter(50, 1000).executors(new HanderSocket(socket)); } } catch (IOException e) { e.printStackTrace(); }finally { if(server!=null){ try { server.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } server = null; } } }}HandlerPoolExecutor自定义线程池类:
package 网络编程_最原始BIO2;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class HanderPoolExecuter { Integer initSize; Integer maxSize; private ExecutorService executorService; private BlockingQueue任务类HandlerSocket类,没有任何变化:blockingQueue = new ArrayBlockingQueue<>(1000); public HanderPoolExecuter(int initSize,int maxSize){ this.initSize = initSize; this.maxSize = maxSize; executorService = new ThreadPoolExecutor(initSize, maxSize, 60, TimeUnit.SECONDS, blockingQueue); } public void executors(Runnable task){ executorService.execute(task); }}
package 网络编程_最原始BIO2;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class HanderSocket implements Runnable{ Socket socket = null; public HanderSocket(Socket socket) { this.socket = socket; } @Override public void run() { BufferedReader reader = null; PrintWriter writer = null; try { reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); writer = new PrintWriter(this.socket.getOutputStream(),true); String body = null; while(true){ body = reader.readLine(); if(body == null) break; System.out.println(body); writer.println("你好,服务端已经接收到你的请求"); System.out.println("已经向客户端反馈结果"); } } catch (Exception e) { e.printStackTrace(); }finally { if(writer !=null){ writer.close(); } if(reader !=null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if(socket!=null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } socket = null; } } }}这种伪异步的方式其实还是阻塞形式的,并不适合当前开发场景,下一篇将介绍JDK1.7之后提供的非阻塞异步NIO通信方式。
转载地址:https://blog.csdn.net/Lee_Ho_/article/details/78118534 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月13日 23时28分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
nrf51822添加UUID
2021-06-30
9轴传感器学习
2021-06-30
C语言 程序代码编写规范
2021-06-30
git入门学习笔记
2021-06-30
Android Input子系统-含实例源码
2021-06-30
Linux Android 常用shell命令汇总 不断更新
2021-06-30
触摸屏响应速度性能分析
2021-06-30
gcc c语言编译流程
2021-06-30
串口UART串行总线协议
2021-06-30
写给准备参加秋招的学弟学妹们~一定要来看哦~
2021-06-30
写给过得很辛苦很迷茫的你~一定要看啊
2021-06-30
排序算法时间复杂度、空间复杂度、稳定性比较
2021-06-30
I2C总线传输协议
2021-06-30
SPI协议详解
2021-06-30
## __VA_ARGS__ ... 宏和可变参数
2021-06-30
我的师傅是风清扬
2021-06-30
printf 宏 调试技巧
2021-06-30
Linux 内核自旋锁
2021-06-30
Secure CRT 自动记录日志
2021-06-30