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中加入了用于实现异步输入输出机制的应用程序接口包:
相关文档:
package thread;
class QQ{
private String name;
private String sex;
boolean flag=false;
public synchronized void put(String name,String sex){
if(flag)
try {
wait();
} catch (InterruptedException e ......
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class GB2UTF
{
public static String GBK2Unicode(String str)
{
StringBuffer result = new StringBuffer();
for (int i = 0; i < str.length(); i++)
&n ......
一下是java实现的有一个归并排序,自己发现自己的基础功太差了,所以最近开始学习算法,好好的联系每一算法,各位大神不要见笑,写的有错的地方希望能够指出来谢谢哈:
package sort;
import java.util.Date;
import java.util.Random;
/*
* 归并排序
*/
public class MergeSort {
public static void main(Stri ......
1、JDK (Java Development Kit)
SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK)。开发人员和最终用户可以利用这个工具来开发java程序。
JDK简单易学,可以通过任何文本编辑器(如:Windows 记事本、UltrEdit、Editplus、FrontPage以及dreamweaver等)编写Java源文件,然 ......
inner class和outer class之间的reflection应用。
package com.gaoqian.reflection;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
class IncludeInn ......