资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 编程开发 >
Advertisement
文章正文

Java中的异步网络编程 _编程

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   
  • 深入探索SOAP1.1--使用SAAJ1.2.1  
  • jfreechart里在页面上生成临时图片的过程剖析  
  • 今天一位老兄回的贴,觉得不错.  
  • Java Threading中的final变量  
  • EJB工作原理学习笔记!  
  • java.lang.ClassNotFoundException: javax.xml.parsers.SAXParserFactory  
  • 在java体系结构中集成Macromedia Flex(翻译)  
  • 第五章 java语言的接口  
  • Java与XML(三)web上的读写应用  
  • Web层改进II-用xmlhttp 无声息提交复杂表单  
  • 页面导航:

    正文内容:
      该文章对编写客户服务器应用的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 piky2004@126.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();
      }
    }


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



     

     
    热门推荐笔记本: IBM笔记本
    相关文章:
    webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
    ©2007 popbb.net All Rights Reserved