Java BIO基本介绍
创始人
2024-01-29 09:23:57
0

Java BIO基本介绍

  • Java BIO基本介绍
    • 工作原理
    • BIO传统通讯实现
        • 总结
    • BIO实现多发和多收
        • 结果:

Java BIO基本介绍

  • 📜Java BIO就是传统的java io 编程,其相关的类和接口在java.io
  • 📜Blo(blockingl/O):同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)

工作原理

🌟服务端
1、通过serversoket注册端口
2、服务端调用accpect方法用于监听客户端的socket请求
3、从socket中获取字节输入或输出流进行数据的读写操作

🌟客户端
1、通过socket对象与服务端连接
2、从socket中得到字节输入或者输出流进行读写操作

在这里插入图片描述

BIO传统通讯实现

服务端

  //服务端public static void main(String[] args) {try {//定义ServerSocket进行端口注册ServerSocket socket = new ServerSocket(8686);//监听客户端的Socket请求Socket st = socket.accept();//获取Socket请求中的字节输入流对象InputStream is = st.getInputStream();//把字节输入流包装成缓冲字符输入流BufferedReader bfr = new BufferedReader(new InputStreamReader(is));String msg;if ((msg = bfr.readLine())!=null){System.out.println("服务端接收到的信息"+ msg);}} catch (IOException e) {e.printStackTrace();}}

客户端

    //客户端public static void main(String[] args) {try {//创建Socket对象请求服务器连接Socket socket = new Socket("127.0.0.1",8686);//从Socket中获取字节流OutputStream os = socket.getOutputStream();//把字节输出流包装成一个打印流PrintStream ps = new PrintStream(os);ps.println("hello word!!! ");ps.close();} catch (IOException e) {e.printStackTrace();}}

总结

  • 🔔在以上通信中,服务端会一致等待客户端的消息,如果客户端没有进行消息的发送,服务端将一直进入阻塞状态。
  • 🔔同时服务端是按照行获取消息的,这意味着客户端也必须按照行进行消息的发送,否则服务端将进入等待消息的阻塞状态!

BIO实现多发和多收

思想:通过while函数实现客户端一直发送消息往服务端,服务端一直接接收消息并输出,实现多发和多收的机制

客户端

//客户端public static void main(String[] args) {try {//创建Socket对象请求服务器连接Socket socket = new Socket("127.0.0.1",8686);//从Socket中获取字节流OutputStream os = socket.getOutputStream();//把字节输出流包装成一个打印流PrintStream ps = new PrintStream(os);Scanner sc =  new Scanner(System.in);while (true){System.out.print("请说");String msg = sc.nextLine();ps.println(msg);ps.flush();}} catch (IOException e) {e.printStackTrace();}}

服务端

//服务端public static void main(String[] args) {try {//定义ServerSocket进行端口注册ServerSocket socket = new ServerSocket(8686);//监听客户端的Socket请求Socket st = socket.accept();//获取Socket请求中的字节输入流对象InputStream is = st.getInputStream();//把字节输入流包装成缓冲字符输入流BufferedReader bfr = new BufferedReader(new InputStreamReader(is));String msg;while ((msg = bfr.readLine())!=null){System.out.println("服务端接收到的信息"+ msg);}} catch (IOException e) {e.printStackTrace();}}

结果:

实现了客户端每发一条消息,服务端就即使接收并打印出来

服务端 | 客户端

Alt Alt

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...