91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Java中的異步網絡編程

發布時間:2022-01-06 21:36:48 來源:億速云 閱讀:106 作者:柒染 欄目:編程語言

如何分析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();
   }
}


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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

怀安县| 景泰县| 象山县| 大城县| 东海县| 托克托县| 丰都县| 九寨沟县| 阜新| 隆安县| 昌图县| 历史| 德化县| 黔东| 福州市| 梁河县| 集贤县| 光山县| 长阳| 额尔古纳市| 法库县| 扶沟县| 浦县| 雷州市| 嘉黎县| 山阳县| 海原县| 大姚县| 绥阳县| 郴州市| 资溪县| 新巴尔虎右旗| 文成县| 昆山市| 瓦房店市| 清原| 武鸣县| 中牟县| 绥德县| 枣庄市| 屯门区|