本文對編寫客戶服務器應用的java程序員有所幫助 可以解決程序在對方出現故障的時候繼續穩定運行 目前java平臺已經廣泛應用於各類客戶/服務器系統中 在實際編程中 往往需要網絡的異步處理 比如客戶程序 如果客戶程序運行先於服務程序 則客戶程序則需要在服務程序啟動後再自動連接服務程序 在客戶程序運行中如果服務程序中途停止 則也需要在不停止的條件下 等待服務程序運行並重新連接 下面提供了壹類異步編程的方法
網絡異步應用涉及到如下幾個關鍵點
◇ 客戶應用啟動後 檢測服務應用是否存在 如果不存在 則等待服務應用啟動 同時不堵塞客戶應用其他任務的執行 壹旦服務應用啟動 客戶應用應該及時的與其建立連接 ◇ 客戶應用和服務應用在數據通信中 服務應用異常退出後 客戶應用應可以檢測到服務應用的退出 同時客戶應用自動清除該通信鏈路 回到初始狀態 等待服務應用重新啟動
該網絡異步編程首先涉及到壹個定時器和定時器事件 該定時器用於不斷的檢測網絡中客戶應用和服務應用是否連通 同時在服務應用出現異常時中止數據通信 返回到初始狀態 網絡的故障可以通過網絡方法的異常處理獲知
定時器包含在網絡通信類中 使得使用該類的應用感知不到定時器的存在 而方便的處理網絡信息
客戶程序類如下結構 public class NetComm ? implements ActionListener{? javax swing Timer timer = new javax swing Timer( 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 = ;? }? timer start();}? public void NetComm_Data(){? try {? OutputStream outputstream = sock getOutputStream(); BufferedWriter out = new BufferedWriter? (new OutputStreamWriter(outputstream)); out write( java by ghf@china );? 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 = ;? }? timer start();? } public void NetComm_Close()? {? if(sock != null)? try{? sock close();? } catch ( IOException e) {? }? } public void actionPerformed(ActionEvent e)? {? if(net_state == )? NetComm_Init();? else? NetComm_Data();? }}
在以上程序中 也可以為外部應用提供壹個回調函數 以便在網絡異常或恢復正常時通知應用 服務應用的網絡通信類類似 可以放在同壹類中
lishixinzhi/Article/program/Java/hx/201311/27252