Java中的非同步網路程式設計 (轉)
Java中的非同步網路程式設計 (轉)[@more@]中的非同步
[ 作者: 郭洪鋒 新增時間: 2001-9-10 20:53:32 ]
對員有所幫助
郭洪鋒 (ghf_emai@china.com)
該文章對編寫客戶應用的java程式設計師有所幫助,可以解決程式在對方出現故障的時候繼續穩定執行.
目前java平臺已經廣泛應用於各類客戶/伺服器中,在實際程式設計中,往往需要網路的非同步處理。比如客戶程式,如果客戶程式執行先於服務程式,則客戶程式則需要在服務程式啟動後再自動連線服務程式;在客戶程式執行中如果服務程式中途停止,則也需要在不停止的條件下,等待服務程式執行並重新連線。下面提供了一類非同步程式設計的方法。
網路非同步應用涉及到如下幾個關鍵點:
客戶應用啟動後,檢測服務應用是否存在。如果不存在,則等待服務應用啟動,同時不堵塞客戶應用其他任務的。一旦服務應用啟動,客戶應用應該及時的與其建立連線。
客戶應用和服務應用在資料通訊中,服務應用異常退出後,客戶應用應可以檢測到服務應用的退出。同時客戶應用自動清除該通訊鏈路,回到初始狀態,等待服務應用重新啟動。
該網路非同步程式設計首先涉及到一個定時器和定時器事件。該定時器用於不斷的檢測網路中客戶應用和服務應用是否連通,同時在服務應用出現異常時中止資料通訊,返回到初始狀態。網路的故障可以透過網路方法的異常處理獲知。
定時器包含在網路通訊類中,使得使用該類的應用感知不到定時器的存在,而方便的處理網路資訊。
該客戶程式類如下結構:
public classComm
implements ActionListener
{
javax..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();
}
}
在以上程式中,也可以為外部應用提供一個回撥,以便在網路異常或恢復正常時通知應用。服務應用的網路通訊類類似,可以放在同一類中。
關於作者
郭洪鋒,從事系統上的分散式應用系統開發,已有四年分散式應用系統開發。E-:ghf_@china.com。
[ 作者: 郭洪鋒 新增時間: 2001-9-10 20:53:32 ]
對員有所幫助
郭洪鋒 (ghf_emai@china.com)
該文章對編寫客戶應用的java程式設計師有所幫助,可以解決程式在對方出現故障的時候繼續穩定執行.
目前java平臺已經廣泛應用於各類客戶/伺服器中,在實際程式設計中,往往需要網路的非同步處理。比如客戶程式,如果客戶程式執行先於服務程式,則客戶程式則需要在服務程式啟動後再自動連線服務程式;在客戶程式執行中如果服務程式中途停止,則也需要在不停止的條件下,等待服務程式執行並重新連線。下面提供了一類非同步程式設計的方法。
網路非同步應用涉及到如下幾個關鍵點:
客戶應用啟動後,檢測服務應用是否存在。如果不存在,則等待服務應用啟動,同時不堵塞客戶應用其他任務的。一旦服務應用啟動,客戶應用應該及時的與其建立連線。
客戶應用和服務應用在資料通訊中,服務應用異常退出後,客戶應用應可以檢測到服務應用的退出。同時客戶應用自動清除該通訊鏈路,回到初始狀態,等待服務應用重新啟動。
該網路非同步程式設計首先涉及到一個定時器和定時器事件。該定時器用於不斷的檢測網路中客戶應用和服務應用是否連通,同時在服務應用出現異常時中止資料通訊,返回到初始狀態。網路的故障可以透過網路方法的異常處理獲知。
定時器包含在網路通訊類中,使得使用該類的應用感知不到定時器的存在,而方便的處理網路資訊。
該客戶程式類如下結構:
public classComm
implements ActionListener
{
javax..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();
}
}
在以上程式中,也可以為外部應用提供一個回撥,以便在網路異常或恢復正常時通知應用。服務應用的網路通訊類類似,可以放在同一類中。
關於作者
郭洪鋒,從事系統上的分散式應用系統開發,已有四年分散式應用系統開發。E-:ghf_@china.com。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990126/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Socket程式設計中的同步、非同步、阻塞和非阻塞(轉)程式設計非同步
- Java 網路程式設計 —— 非阻塞式程式設計Java程式設計
- python 網路程式設計----非阻塞或非同步程式設計Python程式設計非同步
- Java的網路功能與程式設計 一 (轉)Java程式設計
- 一文徹底搞定(阻塞/非阻塞/同步/非同步)網路IO、併發程式設計模型、非同步程式設計模型的愛恨情仇非同步程式設計模型
- Java網路程式設計和NIO詳解5:Java 非阻塞 IO 和非同步 IOJava程式設計非同步
- Java中神經網路Triton GPU程式設計Java神經網路GPU程式設計
- Promise-在Java中以同步的方式非同步程式設計PromiseJava非同步程式設計
- java非同步程式設計Java非同步程式設計
- [譯] 非同步程式設計:阻塞與非阻塞非同步程式設計
- Java網路程式設計4 (轉)Java程式設計
- Java中的非同步程式設計與CompletableFuture應用Java非同步程式設計
- Javascript中的非同步程式設計JavaScript非同步程式設計
- Java 網路程式設計 —— 實現非阻塞式的伺服器Java程式設計伺服器
- Vector在Java程式設計中的應用 (轉)Java程式設計
- 《JAVA併發程式設計實戰》原子變數和非阻塞同步機制Java程式設計變數
- java併發程式設計:同步容器Java程式設計
- 網路IO之阻塞、非阻塞、同步、非同步總結非同步
- 從同步原語看非阻塞同步以及Java中的應用Java
- 如何解讀 Java IO、NIO 中的同步阻塞與同步非阻塞?Java
- 玩轉 PHP 網路程式設計全套阻塞與非阻塞 IOPHP程式設計
- 程式設計師的“非程式設計師”之路程式設計師
- 【譯】Dart/Flutter中的非同步程式設計DartFlutter非同步程式設計
- Flutter 中的非同步程式設計總結Flutter非同步程式設計
- Python 中的非同步程式設計:AsyncioPython非同步程式設計
- java同步非阻塞IOJava
- [轉載]初級Java程式設計師的學習路線Java程式設計師
- Java實驗——基於GUI的網路通訊程式設計JavaGUI程式設計
- dart系列之:dart中的非同步程式設計Dart非同步程式設計
- .NET 中的 async/await 非同步程式設計AI非同步程式設計
- Java 網路程式設計Java程式設計
- JAVA網路程式設計Java程式設計
- SELinux 的網路安全設計(轉)Linux
- 【進階之路】併發程式設計(三)-非阻塞同步機制程式設計
- JAVA網路程式設計(2)TCP程式設計Java程式設計TCP
- 我來談談網路設計,程式設計,網管設計三者群體的差異 (轉)程式設計
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- java併發程式設計——執行緒同步Java程式設計執行緒