熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java中的異步網絡編程

2013-11-23 19:39:14  來源: Java核心技術 

  本文對編寫客戶服務器應用的java程序員有所幫助可以解決程序在對方出現故障的時候繼續穩定運行

  目前java平台已經廣泛應用於各類客戶/服務器系統中在實際編程中往往需要網絡的異步處理比如客戶程序如果客戶程序運行先於服務程序則客戶程序則需要在服務程序啟動後再自動連接服務程序在客戶程序運行中如果服務程序中途停止則也需要在不停止的條件下等待服務程序運行並重新連接下面提供了一類異步編程的方法

  網絡異步應用涉及到如下幾個關鍵點

  ◇ 客戶應用啟動後檢測服務應用是否存在如果不存在則等待服務應用啟動同時不堵塞客戶應用其他任務的執行一旦服務應用啟動客戶應用應該及時的與其建立連接

  ◇ 客戶應用和服務應用在數據通信中服務應用異常退出後客戶應用應可以檢測到服務應用的退出同時客戶應用自動清除該通信鏈路回到初始狀態等待服務應用重新啟動

  該網絡異步編程首先涉及到一個定時器和定時器事件該定時器用於不斷的檢測網絡中客戶應用和服務應用是否連通同時在服務應用出現異常時中止數據通信返回到初始狀態網絡的故障可以通過網絡方法的異常處理獲知

  定時器包含在網絡通信類中使得使用該類的應用感知不到定時器的存在而方便的處理網絡信息

  客戶程序類如下結構

public class NetComm
           implements ActionListener
{
  
javaxswingTimer timer = new javaxswingTimer(this);
      
Socket sock;
private EventNotifier en;
public static int    net_state = ;
InetAddress ServerAddr;
int ServerPort;
  
public NetComm(InetAddress addr int port){
   ServerAddr = addr;
   ServerPort  = port;
}

public void NetComm_Init() {
      
    net_state = ;
       try {
           sock = new Socket(ServerAddr ServerPort);
       } catch (IOException e) {
           net_state = ;
       }
       timerstart();
}
  
public void NetComm_Data()
{
   try {
       OutputStream outputstream = sockgetOutputStream();
      
       BufferedWriter out = new BufferedWriter
           (new OutputStreamWriter(outputstream));
          
       outwrite(java by ghf@chinacom);
       outflush();

       BufferedReader in = new BufferedReader
               (new InputStreamReader(sockgetInputStream()));
      
       boolean more = true;
       while(more) {
           String str = inreadLine();
           if(str == null) more = false;
           else
               // 處理數據
               Systemoutprintln(str);
       }
          
       inclose();

       } catch (IOException e) {
       NetComm_Close();
       net_state = ;
       }
   timerstart();
   }
  
   public void NetComm_Close()
   {
       if(sock != null)
           try{
               sockclose();
               } catch ( IOException e) {
           }
   }
  
   public void actionPerformed(ActionEvent e)
   {
       if(net_state == )
              NetComm_Init();
       else
                   NetComm_Data();
   }
}

  在以上程序中也可以為外部應用提供一個回調函數以便在網絡異常或恢復正常時通知應用服務應用的網絡通信類類似可以放在同一類中

  作者簡介

  郭洪鋒從事UNIX系統上的分布式應用系統開發已有四年分布式應用系統開發經驗Email:ghf_email@chinacom


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27252.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.