易截截图软件、单文件、免安装、纯绿色、仅160KB

java异步通信

在Merlin之前,编写Socket程序是比较繁琐的工作.因为输入输出都必须同步.这样,对于多客户端客户/服务器模式,不得不使用多线程.即为每个连接的客户都分配一个线程来处理输入输出.由此而带来的问题是可想而知的.程序员不得不为了避免死锁,线程安全等问题,进行大量的编码和测试.很多人都在抱怨为什么不在Java中引入异步输入输出机制.比较官方的解释是,任何一种应用程序接口的引入,都必须兼容任何操作平台.因为Java是跨平台的.而当时支持异步输入输出机制的操作平台显然不可能是全部.自Java 2 Platform以后,分离出J2SE,J2ME,J2EE三种不同类型的应用程序接口,以适应不同的应用开发.Java标准的制订者们意识到了这个问题,并且支持异步输入输出机制的操作平台在当今操作平台中处于主流地位.于是,Jdk(J2SE) 的第五次发布中引入了异步输入输出机制.
以前的Socket进程通信程序设计中,一般客户端和服务器端程序设计如下:
服务器端:
//服务器端监听线程
while (true) {
.............
Socket clientSocket;
clientSocket = socket.accept(); //取得客户请求Socket,如果没有//客户请求连接,线程在此处阻塞
//用取得的Socket构造输入输出流
PrintStream os = new PrintStream(new
BufferedOutputStream(clientSocket.getOutputStream(),
1024), false);
BufferedReader is = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
//创建客户会话线程,进行输入输出控制,为同步机制
new ClientSession();
.......
}
客户端:
............
clientSocket = new Socket(HOSTNAME, LISTENPORT);//连接服务器套接字
//用取得的Socket构造输入输出流
PrintStream os = new PrintStream(new
BufferedOutputStream(clientSocket.getOutputStream(),
1024), false);
BufferedReader is = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
//进行输入输出控制
.......
以上代码段只是用同步机制编写Socket进程通信的一个框架,实际上要考虑的问题要复杂的多(有兴趣的读者可以参考我的一篇文章《Internet 实时通信系统设计与实现》)。将这样一个框架列出来,只是为了与用异步机制实现的Socket进程通信进行比较。下面将介绍使用异步机制的程序设计。
回页首
用异步输入输出流编写Socket进程通信程序
在Merlin中加入了用于实现异步输入输出机制的应用程序接口包:


相关文档:

sql 2005 存储过程分页 java 代码

 create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',         
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列 ......

Java Web应用在ARM Linux平台上的实现


0
Java Web应用在ARM Linux平台上的实现
Posted in 硕博论文 at 十一月 12th, 2009 / No Comments »
王伟,周兰江,刘礼东,解云霄
(昆明理工大学信息工程与自动化学院,云南昆明650051)
1引言
随着网络信息技术的飞速发展,Web技术越来越多的用在控制领域,客户端只需连接以太网,取得访问权限,就可以访 ......

Java中的equals方法和==运算


值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相 ......

Java验证时间段问题

  在处理监测数据实时录入时,需要提供当前班次信息{大白班,小夜班,大夜班},班次信息是根据给定时间段进行设定类似{{"8:00","16:00"},{"16:00","00:00"},{"00:00","8:00"}}
  处理办法
   · 取当前时间、转换验证起始、结束时间进行比较。
  相关代码
 /**
* 时间段测试
......

Java泛型九诫

1、不可以用一个本地类型(如int   float)来替换泛型
2、运行时类型检查,不同类型的泛型类是等价的(Pair<String>与Pair<Employee>是属于同一个类型Pair),
     这一点要特别注意,即如果a instanceof Pair<String>==true的话,并不代表a.getFirst()的返回值是一个S ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号