Java中的异步网络编程

本文对编写客户机服务器应用程序的java程序员有一定的帮助,可以解决当对方出现故障时程序仍会继续稳定运行的问题。目前,java平台已经广泛应用于各种客户/服务器系统的实际编程中,经常需要对网络进行异步处理,比如客户端程序。如果客户端程序在服务程序之前运行,则客户端程序需要在服务程序启动后自动连接服务程序。如果服务程序在客户端程序中途停止,也需要等待服务程序运行并重新连接而不停止。下面提供一种异步编程方法。

网络异步应用涉及以下几个关键点。

◇客户端应用启动后,检测服务应用是否存在。如果它不存在,请等待服务应用程序启动,而不要阻止客户端应用程序的其他任务的执行。一旦服务应用程序启动,客户端应用程序应该及时与其建立连接。服务应用程序在数据通信中异常退出后,客户端应用程序应该能够检测到服务应用程序的退出,同时客户端应用程序会自动清空通信链路,返回初始状态等待服务应用程序重启。

网络的异步编程首先涉及定时器和定时器事件。定时器用于持续检测网络中客户端应用和服务应用是否连接,同时当服务应用出现异常时,停止数据通信,返回初始状态。通过网络方法的异常处理可以知道网络的故障。

定时器包含在网络通信类中,使得使用该类的应用程序无法感知定时器的存在,也无法方便地处理网络信息。

客户端程序类具有以下结构:公共类NetComm?实现ActionListener{?javax swing Timer Timer = new javax swing Timer(this);?插座袜子;私有事件通知程序en;public static int net _ state =;InetAddress ServerAddrint ServerPort?public NetComm(inet address addr int port){?ServerAddr = addr?服务器端口?=端口;}

public void NetComm_Init() {?net _ state =;?试试{?sock = new Socket(server addr server port);?} catch (IOException e) {?net _ state =;?}?定时器start();}?public void NetComm_Data(){?试试{?output stream output stream = sock get output stream();buffered writer out = new buffered writer?(new output streamwriter(output stream));out write(Java by ghf @ China);?out flush();

?BufferedReader in =新BufferedReader?(new InputStreamReader(sock getInputStream());布尔more = true?while(更){?string str = in readLine();?if(str = = null)more = false;?不然呢?//处理数据?系统输出println(str);?} in close();

?} catch (IOException e) {?NetComm _ Close();?net _ state =;?}?定时器start();?} public void NetComm_Close()?{?如果(袜子!= null)?试试{?袜子close();?} catch ( IOException e) {?}?} public void action performed(ActionEvent e)?{?if(net_state ==)?NetComm _ Init();?不然呢?NetComm _ Data();?}}

在上述程序中,还可以为外部应用提供回调函数,通知应用服务应用在网络异常或恢复正常时,可以将网络通信类放在同一个类中。

Lishi Xinzhi/Article/program/Java/hx/201311/27252