溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何分析Java中的異步網(wǎng)絡(luò)編程

發(fā)布時(shí)間:2022-01-06 21:36:48 來(lái)源:億速云 閱讀:104 作者:柒染 欄目:編程語(yǔ)言

如何分析Java中的異步網(wǎng)絡(luò)編程,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。


目前java平臺(tái)已經(jīng)廣泛應(yīng)用于各類(lèi)客戶(hù)/服務(wù)器系統(tǒng)中,在實(shí)際編程中,往往需要網(wǎng)絡(luò)的異步處理。比如客戶(hù)程序,如果客戶(hù)程序運(yùn)行先于服務(wù)程序,則客戶(hù)程序則需要在服務(wù)程序啟動(dòng)后再自動(dòng)連接服務(wù)程序;在客戶(hù)程序運(yùn)行中如果服務(wù)程序中途停止,則也需要在不停止的條件下,等待服務(wù)程序運(yùn)行并重新連接。下面提供了一類(lèi)異步編程的方法。

網(wǎng)絡(luò)異步應(yīng)用涉及到如下幾個(gè)關(guān)鍵點(diǎn):

客戶(hù)應(yīng)用啟動(dòng)后,檢測(cè)服務(wù)應(yīng)用是否存在。如果不存在,則等待服務(wù)應(yīng)用啟動(dòng),同時(shí)不堵塞客戶(hù)應(yīng)用其他任務(wù)的執(zhí)行。一旦服務(wù)應(yīng)用啟動(dòng),客戶(hù)應(yīng)用應(yīng)該及時(shí)的與其建立連接。
客戶(hù)應(yīng)用和服務(wù)應(yīng)用在數(shù)據(jù)通信中,服務(wù)應(yīng)用異常退出后,客戶(hù)應(yīng)用應(yīng)可以檢測(cè)到服務(wù)應(yīng)用的退出。同時(shí)客戶(hù)應(yīng)用自動(dòng)清除該通信鏈路,回到初始狀態(tài),等待服務(wù)應(yīng)用重新啟動(dòng)。

該網(wǎng)絡(luò)異步編程首先涉及到一個(gè)定時(shí)器和定時(shí)器事件。該定時(shí)器用于不斷的檢測(cè)網(wǎng)絡(luò)中客戶(hù)應(yīng)用和服務(wù)應(yīng)用是否連通,同時(shí)在服務(wù)應(yīng)用出現(xiàn)異常時(shí)中止數(shù)據(jù)通信,返回到初始狀態(tài)。網(wǎng)絡(luò)的故障可以通過(guò)網(wǎng)絡(luò)方法的異常處理獲知。

定時(shí)器包含在網(wǎng)絡(luò)通信類(lèi)中,使得使用該類(lèi)的應(yīng)用感知不到定時(shí)器的存在,而方便的處理網(wǎng)絡(luò)信息。

該客戶(hù)程序類(lèi)如下結(jié)構(gòu):
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
               // 處理數(shù)據(jù)
               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();
   }
}


在以上程序中,也可以為外部應(yīng)用提供一個(gè)回調(diào)函數(shù),以便在網(wǎng)絡(luò)異?;蚧謴?fù)正常時(shí)通知應(yīng)用。服務(wù)應(yīng)用的網(wǎng)絡(luò)通信類(lèi)類(lèi)似,可以放在同一類(lèi)中。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI