Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 315|回复: 0

[网络编程学习]Java中的异步网络编程

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-30 00:00:04 | 显示全部楼层 |阅读模式
    该文章对编写客户服务器应用的java程序员有所帮助,可以解决程序在对方出现故障的时候继续稳定运行.

    目前java平台已经广泛应用于各类客户/服务器系统中,在实际编程中,往往需要网络的异步处理。比如客户程序,如果客户程序运行先于服务程序,则客户程序则需要在服务程序启动后再自动连接服务程序;在客户程序运行中如果服务程序中途停止,则也需要在不停止的条件下,等待服务程序运行并重新连接。下面提供了一类异步编程的方法。

    网络异步应用涉及到如下几个关键点:
    客户应用启动后,检测服务应用是否存在。如果不存在,则等待服务应用启动,同时不堵塞客户应用其他任务的执行。一旦服务应用启动,客户应用应该及时的与其建立连接。

    客户应用和服务应用在数据通信中,服务应用异常退出后,客户应用应可以检测到服务应用的退出。同时客户应用自动清除该通信链路,回到初始状态,等待服务应用重新启动。

      
      

    1.                            该网络异步编程首先涉及到一个定时器和定时器事件。该定时器用于不断的检测网络中客户应用和服务应用是否连通,同时在服务应用出现异常时中止数据通信,返回到初始状态。网络的故障可以通过网络方法的异常处理获知。
    2.                         

    3.                            定时器包含在网络通信类中,使得使用该类的应用感知不到定时器的存在,而方便的处理网络信息。
    4.                         

    5.                         该客户程序类如下结构:

    6.                         
    7.                         
    复制代码
    1. import java.io.*;
    2. import java.net.*;
    3. import java.awt.event.*;
    4. public class NetComm implements ActionListener{
    5.    
    6.   javax.swing.Timer timer = new javax.swing.Timer(3000,this);
    7.       
    8.   Socket sock;
    9.   //private EventNotifier en;
    10.   public static int net_state = 0;
    11.   InetAddress ServerAddr;
    12.   int ServerPort;
    13.    
    14.   public NetComm(InetAddress addr, int port){
    15.     ServerAddr = addr;
    16.     ServerPort  = port;
    17.   }
    复制代码
    1. public void NetComm_Init() {
    2.       
    3.     net_state = 1;
    4.        try {
    5.            sock = new Socket(ServerAddr, ServerPort);
    6.        } catch (IOException e) {
    7.            net_state = 0;
    8.        }
    9.        timer.start();
    10. }
    11.    
    12. public void NetComm_Data(){
    13.    try {
    14.        OutputStream outputstream = sock.getOutputStream();
    15.       
    16.        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(outputstream));
    17.            
    18.        out.write("java by ghf@china.com");
    19.        out.flush();
    20.        BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
    21.       
    22.        boolean more = true;
    23.        while(more) {
    24.            String str = in.readLine();
    25.            if(str == null) more = false;
    26.            else
    27.                // 处理数据
    28.                System.out.println(str);
    29.        }
    30.            
    31.        in.close();
    32.       } catch (IOException e) {
    33.          NetComm_Close();
    34.          net_state = 0;
    35.        }
    36.      timer.start();
    37.    }
    38.    
    39.    public void NetComm_Close()
    40.    {
    41.        if(sock != null)
    42.            try{
    43.                sock.close();
    44.                } catch ( IOException e) {
    45.            }
    46.    }
    47.    
    48.    public void actionPerformed(ActionEvent e)
    49.    {
    50.        if(net_state == 0)
    51.               NetComm_Init();
    52.        else
    53.               NetComm_Data();
    54.    }
    55. }
    56. 在以上程序中,也可以为外部应用提供一个回调函数,以便在网络异常或恢复正常时通知应用。
    57. 服务应用的网络通信类类似,可以放在同一类中。

    58.                         
    复制代码

       
         
         
          
          

            
          

            
          
         
       

    1.                         
    复制代码

      


    源码下载:http://file.javaxxz.com/2014/10/30/000003687.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-5 15:48 , Processed in 0.327683 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表