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