Java中的异步网络编程

原创 2001年10月19日 12:39:00
Java中的异步网络编程

[ 作者: 郭洪锋   添加时间: 2001-9-10 20:53:32 ]


对程序员有所帮助
郭洪锋 (ghf_emai@china.com)

该文章对编写客户服务器应用的java程序员有所帮助,可以解决程序在对方出现故障的时候继续稳定运行.
目前java平台已经广泛应用于各类客户/服务器系统中,在实际编程中,往往需要网络的异步处理。比如客户程序,如果客户程序运行先于服务程序,则客户程序则需要在服务程序启动后再自动连接服务程序;在客户程序运行中如果服务程序中途停止,则也需要在不停止的条件下,等待服务程序运行并重新连接。下面提供了一类异步编程的方法。

网络异步应用涉及到如下几个关键点:

客户应用启动后,检测服务应用是否存在。如果不存在,则等待服务应用启动,同时不堵塞客户应用其他任务的执行。一旦服务应用启动,客户应用应该及时的与其建立连接。
客户应用和服务应用在数据通信中,服务应用异常退出后,客户应用应可以检测到服务应用的退出。同时客户应用自动清除该通信链路,回到初始状态,等待服务应用重新启动。

该网络异步编程首先涉及到一个定时器和定时器事件。该定时器用于不断的检测网络中客户应用和服务应用是否连通,同时在服务应用出现异常时中止数据通信,返回到初始状态。网络的故障可以通过网络方法的异常处理获知。

定时器包含在网络通信类中,使得使用该类的应用感知不到定时器的存在,而方便的处理网络信息。

该客户程序类如下结构:
public class NetComm
           implements ActionListener
{
   
javax.swing.Timer timer = new javax.swing.Timer(3000,this);
       
Socket sock;
private EventNotifier en;
public static int    net_state = 0;
InetAddress ServerAddr;
int ServerPort;
   
public NetComm(InetAddress addr, int port){
   ServerAddr = addr;
   ServerPort  = port;
}

public void NetComm_Init() {
       
    net_state = 1;
       try {
           sock = new Socket(ServerAddr, ServerPort);
       } catch (IOException e) {
           net_state = 0;
       }
       timer.start();
}
   
public void NetComm_Data()
{
   try {
       OutputStream outputstream = sock.getOutputStream();
       
       BufferedWriter out = new BufferedWriter
           (new OutputStreamWriter(outputstream));
           
       out.write("java by ghf@china.com");
       out.flush();

       BufferedReader in = new BufferedReader
               (new InputStreamReader(sock.getInputStream()));
       
       boolean more = true;
       while(more) {
           String str = in.readLine();
           if(str == null) more = false;
           else
               // 处理数据
               System.out.println(str);
       }
           
       in.close();

       } catch (IOException e) {
       NetComm_Close();
       net_state = 0;
       }
   timer.start();
   }
   
   public void NetComm_Close()
   {
       if(sock != null)
           try{
               sock.close();
               } catch ( IOException e) {
           }
   }
   
   public void actionPerformed(ActionEvent e)
   {
       if(net_state == 0)
              NetComm_Init();
       else
                   NetComm_Data();
   }
}




在以上程序中,也可以为外部应用提供一个回调函数,以便在网络异常或恢复正常时通知应用。服务应用的网络通信类类似,可以放在同一类中。

关于作者
郭洪锋,从事UNIX系统上的分布式应用系统开发,已有四年分布式应用系统开发经验。E-mail:ghf_email@china.com。  

网络编程中的阻塞,非阻塞、同步,异步概念

网络编程中的阻塞,非阻塞、同步,异步概念网络编程中,我们常常接触阻塞,非阻塞,同步,异步等概念,有些概念可能交叉使用,比如异步非阻塞,同步非阻塞,同步阻塞等等,这些概念看似相似,却往往又有着不同的概念...
  • sryan
  • sryan
  • 2016年10月11日 16:20
  • 1306

网络编程——基于消息的异步套接字编程

Windows套接字在两种模式下执行I/O操作,一种是阻塞模式,一种是非阻塞模式。在阻塞模式下,在I/O操作完成之前,执行I/O操作的Winsock函数会一直等待下去,不会立即返回程序,将控制权交回程...
  • Sayesan
  • Sayesan
  • 2015年02月04日 15:39
  • 1038

网络编程中阻塞与非阻塞,同步与异步、I/O模型的理解

1. 概念理解      在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发...
  • bzhxuexi
  • bzhxuexi
  • 2014年02月20日 14:10
  • 2585

网络编程Select模型

Select在Socket编程中还是对照主要的,然而对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯性写诸如connect、accept、recv或recvfrom这么的堵塞程序...
  • djb100316878
  • djb100316878
  • 2015年04月27日 16:08
  • 887

网络编程为什么能异步来做

网络编程为什么能异步来做: 因为网络IO channel支持异步(文件channel是不支持异步IO的); 网络IO channel为什么支持异步 因为操作系统帮我们缓存了从网络上接收到的数据,...
  • KuaiLeShiFu
  • KuaiLeShiFu
  • 2017年03月25日 10:46
  • 231

网络编程io总结区分。阻塞,非阻塞,异步,同步

借鉴提炼自http://blog.csdn.net/historyasamirror/article/details/5778378 在网络编程中,肯定会有读写io的问题。这时候就会有了五种io模型...
  • me4weizhen
  • me4weizhen
  • 2016年08月09日 16:13
  • 642

Java中网络编程小结

网络编程(理解)(1)网络编程:用Java语言实现计算间数据的信息传递和资源共享(2)网络编程模型(3)网络编程的三要素 A:IP地址 a:点分十进制 b:IP地...
  • xiakexiaohu
  • xiakexiaohu
  • 2017年07月16日 20:48
  • 215

网络编程中同步、异步、阻塞和非阻塞四种调用方式的区别

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那些需...
  • zzsfqiuyigui
  • zzsfqiuyigui
  • 2011年12月04日 23:35
  • 1256

Java中的异步网络编程

    该文章对编写客户服务器应用的java程序员有所帮助,可以解决程序在对方出现故障的时候继续稳定运行.  目前java平台已经广泛应用于各类客户/服务器系统中,在实际编程中,往往需要网络的异步处理...
  • piky2004
  • piky2004
  • 2005年02月15日 12:57
  • 405

浅谈Linux网络编程的基本内容

今天只是想浅谈一下对于Linux网络编程中一些基本问题的理解。我们知道互联网通信都是基于TCP/IP协议簇的,里面从一开始设计就保证了基本的通信安全和效率问题。 顾名思义的解释:IP(Internet...
  • xianszm007
  • xianszm007
  • 2013年07月28日 21:33
  • 1829
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的异步网络编程
举报原因:
原因补充:

(最多只允许输入30个字)