同步阻塞式I/O编程
来源:互联网 发布:cs软件界面设计工具 编辑:程序博客网 时间:2024/06/08 17:12
1.BIO主要的问题在于每当有一个新的客户端请求接入时,服务器必须创建一个新的线程处理新接入的客户端链路,一个线程只可以处理一个客户端连接,在高性能服务器应用领域,往往需要面向成千上万个客户端的并发连接,这种模型显然无法满足高性能,高并发接入的场合
代码例子:
1.server端代码
package com.afan.bio;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/** * 同步阻塞io * @author Lenovo * */public class TimeServer { public static void main(String[] args) throws IOException{ int port = 8080; if(args != null && args.length > 0){ try { port = Integer.valueOf(args[0]); } catch (NumberFormatException e) { // 采用默认值 } } ServerSocket server = null; try { server = new ServerSocket(port); System.out.println("the time server is start in port:" + port); Socket socket = null; while (true) { socket = server.accept(); new Thread(new TimeServerHandler(socket)).start(); } } finally{ if(server != null){ System.out.println("the time server close"); server.close(); server = null; } } }}
2.server端处理类
package com.afan.bio;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.sql.Date;public class TimeServerHandler implements Runnable { private Socket socket; public TimeServerHandler(Socket socket) { this.socket = socket; } @Override public void run() { BufferedReader in = null; PrintWriter out = null; try { in = new BufferedReader(new InputStreamReader(this.socket.getInputStream())); out = new PrintWriter(this.socket.getOutputStream(),true); String currentTime = null; String body = null; while(true){ body = in.readLine(); if(body == null){ break; } System.out.println("the time server receive order :" + body); currentTime = "Query TIME ORDER".equals(body) ? new Date(System.currentTimeMillis()).toString() :"BAD ORDER"; out.println(currentTime); } } catch (Exception e) { if(in != null){ try { in.close(); } catch (Exception e2) { e2.printStackTrace(); } } if(out != null){ out.close(); out = null; } if(this.socket != null){ try { this.socket.close(); } catch (Exception e2) { e2.printStackTrace(); } this.socket = null; } } }}
3.客户端代码
package com.afan.bio;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class TimeClient { public static void main(String[] args){ int port = 8080; if(args != null && args.length > 0){ try { port = Integer.valueOf(args[0]); } catch (Exception e) { //采用默认值 } } Socket socket = null; BufferedReader in = null; PrintWriter out = null; try { socket = new Socket("127.0.0.1",port); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(),true); out.println("QUERY TIME ORDER"); System.out.println("send order 2 server succeed."); String resp = in.readLine(); System.out.println("NOW IS :"+ resp); } catch (Exception e) { // 不需要处理 }finally{ if(in != null){ try { in.close(); } catch (Exception e2) { e2.printStackTrace(); } } if(out != null){ out.close(); out = null; } if(socket != null){ try { socket.close(); } catch (Exception e2) { e2.printStackTrace(); } socket = null; } } }}
阅读全文
0 0
- 同步阻塞式I/O编程
- 同步阻塞式I/O模型
- 同步阻塞通信-伪异步I/O编程
- 同步异步阻塞非阻塞I/O
- I/O 阻塞&非阻塞&同步&异步
- Java Socket 通信(同步阻塞式I/O)
- 网络编程中阻塞与非阻塞,同步与异步、I/O模型的理解
- C++ socket编程基础五(I/O - 同步,异步,阻塞,非阻塞 )
- UNIX网络编程1 理解同步、阻塞、非阻塞、异步网络I/O
- 【UNIX网络编程】五种I/O模型,阻塞非阻塞同步异步问题详解
- 网络编程中阻塞与非阻塞、同步与异步、I/O模型的理解
- 网络编程中阻塞与非阻塞,同步与异步、I/O模型的理解
- 网络编程中阻塞与非阻塞,同步与异步、I/O模型的理解
- 阻塞式I/0 和 非阻塞式I/O 同步异步详细介绍
- I/O模型:同步I/O和异步I/O,阻塞I/O和非阻塞I/O
- I/O模型(2)同步非阻塞
- 同步I/O(阻塞I/O),异步I/O(非阻塞)
- 阻塞与非阻塞I/O,I/O复用,同步和异步I/O
- jquery完成一个日历demo练习总结
- sql-server数据库(基本概念)
- 达尔文OP2官方demo解读(一)
- Map简单应用
- 存储过程和触发器
- 同步阻塞式I/O编程
- 寻找Windows下的极速集成黑客工具——最终结果:Pentest BOX
- hive学习笔记-hive安装部署
- Zookeeper 工作流
- C语言大数加法
- Android源码分析之仿OrmLite数据库框架
- git 在linux 上的详细使用
- Android Canvas 旋转Rect功能实施
- Java正则表达式的语法与示例