`
lihua-he
  • 浏览: 103059 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

udp简单通讯示例---心跳示例

阅读更多
//发送心跳
new UDPToPointCenter(18056).start();   

public class UDPToPointCenter extends Thread {
private static Logger logger = Logger.getLogger("com.hintsoft.pubwin.netcafe.socket.UDPToPointCenter");

private int listenPort;   //发送的端口号
private static DatagramSocket sock;
private Timer timer;
private PooledExecutor _processExecutor = new PooledExecutor(new LinkedQueue(), 1);  //序列化
protected static PooledExecutor clientPool;

public UDPToPointCenter(int aListenPort) {
        try {
            this.timer = new Timer();
            this.listenPort = aListenPort;
            sock = new DatagramSocket(this.listenPort);
            this.timer.schedule(new ConnSvrTask(),1 * 10 * 1000,Global.UDP_SYNC_SIGNAL_INTERVAL);
           
            _processExecutor.setMaximumPoolSize(5);
            _processExecutor.setMinimumPoolSize(1);
            _processExecutor.setKeepAliveTime(10 * 1000);
            _processExecutor.waitWhenBlocked();
            _processExecutor.createThreads(1);
        }
        catch (SocketException e) {
            logger.error(e, e);
        }
        catch (Exception e) {
            logger.error(e, e);
        }
    }

private class ConnSvrTask extends TimerTask {
        private Logger logger = Logger.getLogger("com.hintsoft.pubwin.netcafe.socket.ConnSvrTask");
       
        public ConnSvrTask() {
            super();
        }
        public void run() {
            try {
                byte[] b = new byte[21];
                DatagramPacket packet = new DatagramPacket(b, b.length);
                // 发送心跳
    try {
   
    byte[] desData = new byte[1024];
                    packet = new DatagramPacket(desData, desData.length, InetAddress.getByName(CachedConfigObject.getServerCenterCfgOtherObj().getPointCenterIP()), 18060);
                 
                    sock.send(packet);
                    }catch (UnknownHostException e) {
                    logger.error(e, e);
                }catch (IOException e) {
                    logger.error(e, e);
                }
            }
            catch (Exception e) {
                logger.error(e, e);
            }
        }
    }
}


//接收心跳
new UderServerListen(18060).start();

public class UderServerListen extends Thread {
private static Logger logger = Logger.getLogger("com.hintsoft.pubwin.netcafe.socket.UdpServerClient");

private static DatagramSocket sock;
private List iplist;
private int listenPort;
private PooledExecutor _processExecutor = new PooledExecutor(new LinkedQueue(), 1);
private long udpBarBeg = System.currentTimeMillis();//开始搜索心跳的时间

public UderServerListen(int listenPort){
try {
            this.iplist = Global.getAllIpAddress();
            this.listenPort = listenPort;
            sock = new DatagramSocket(this.listenPort);
           
            _processExecutor.setMaximumPoolSize(5);
            _processExecutor.setMinimumPoolSize(1);
            _processExecutor.setKeepAliveTime(10 * 1000);
            _processExecutor.waitWhenBlocked();
            _processExecutor.createThreads(1);
        }
        catch (SocketException e) {
            logger.error(e, e);
        }catch (Exception e) {
            logger.error(e, e);
        }
}
public void run() {
      if (sock == null) {
       return;
      }

      while(true){
          try {
             byte[] data = new byte[1024];
              DatagramPacket packet = new DatagramPacket(data, data.length);

              sock.receive(packet);
              UDPPacketProcessor processor = new UDPPacketProcessor(packet);

              _processExecutor.execute(processor);
          }
          catch (java.net.SocketException e) {
              logger.error(e, e);
          }
          catch (java.net.UnknownHostException e) {
              logger.error(e, e);
          }
          catch (java.io.IOException e) {
              logger.error(e, e);
          }
          catch (Exception e) {
              logger.error(e, e);
          }
      }
  }
private class UDPPacketProcessor implements Runnable {

        private DatagramPacket _packet;

        public UDPPacketProcessor(DatagramPacket packet) {
            _packet = packet;
        }

        public void run() {
            try {
            List barList = new ArrayList();
            barList.addAll(iplist);
                String clientIP = _packet.getAddress().getHostAddress();
                if(logger.isDebugEnabled()){
                logger.debug("接收到的ip "+clientIP);
                }
                if (iplist.contains(clientIP)) {
                Global.setBarStatus(Global.BAR_STATUS_ONLINE, clientIP);
                for(int index=0;index<barList.size();index++){
                if(barList.get(index).equals(clientIP)){
                barList.remove(index);
                }
                }
                }else{
                //判断心跳断开时间是否超过1小时,超过1小时则视为不在线
                    if (System.currentTimeMillis() - udpBarBeg >  1 * 60 * 60 * 1000L){
                    if(null!=barList && barList.size()>0){
                    for(int i=0;i<barList.size();i++){
                    Global.setBarStatus(Global.BAR_STATUS_UNONLINE, barList.get(i).toString());
                    }
                    }
                    }
                }
            }catch(Exception e){
            logger.error(e,e);
            }
        }
}
}
分享到:
评论

相关推荐

    C#简单的UDP传输示例

    本示例是关于如何在C#环境下实现一个简单的UDP通信过程,主要关注客户端的实现。 首先,了解UDP的特点是理解这个示例的基础。与TCP(Transmission Control Protocol)不同,UDP不建立连接,不保证数据的顺序和完整...

    c# UDP 网络心跳 网络通信实现 初学者源码

    在本文中,我们将深入探讨如何使用C#进行UDP网络通信,并通过心跳机制确保连接稳定性。首先,我们需要了解UDP(User Datagram Protocol)的基本概念。UDP是一种无连接的传输协议,它不保证数据包的顺序、可靠性和...

    tio-udp-showcase-master

    文件名“tio-udp-showcase-master”暗示这是一个示例项目,可能包含了完整的TIO UDP应用案例。在这个项目中,你可以找到如何配置服务器和客户端,以及如何处理数据交互的示例代码。通过学习这个案例,可以更直观地...

    UDP_c#UDP_vs2013UDP通信_UDP通信_vs2019udp通信_featherss3l

    UDP不保证数据包的顺序、完整性和可靠性,它仅仅提供一个简单的端到端服务,允许数据快速发送,无需建立连接。这意味着发送方可以随时发送数据,而接收方则可能接收到乱序或丢失的数据包。这种特性使得UDP适用于实时...

    UDP通讯DEMO(C#)

    UDP通讯DEMO(C#)是基于C#编程语言实现的一个通信示例,它演示了如何在Windows和WINCE操作系统上进行用户数据报协议(UDP)的通信。UDP是一种无连接的、不可靠的传输层协议,它在互联网协议族中扮演着重要的角色,...

    Socket-UDP-长链接

    文件名"Socket-UDP-长链接"可能包含了示例代码或者文档,这些资源可以帮助你理解和实现上述机制。为了创建一个稳定的UDP长链接,开发者需要深入理解网络协议,并具备良好的编程技巧,以确保在不可靠的网络环境中实现...

    真正的Delphi点对点UDP通讯实例

    "真正的Delphi点对点UDP通讯实例"是一个示例程序,展示了如何利用Delphi编程环境实现UDP协议的点对点通信,尤其在穿透NAT(Network Address Translation)的情况下。这里我们将深入探讨相关的知识点。 首先,UDP...

    winform socket通讯和心跳包

    在IT行业中,Socket编程是一种广泛应用于网络通信的技术,它允许两...文件"socket1"可能是项目源代码或示例,进一步展示了如何在实际开发中实施这些概念。学习和掌握这些技术,对于开发实时、可靠的网络应用至关重要。

    java写的UDP源码

    UDP提供了一种简单且高效的服务,适用于实时数据传输或对延迟敏感的应用,因为它不保证数据包的顺序、可靠性和错误检查。下面我们将深入探讨UDP的基本概念、Java中的UDP编程以及给出的源码可能涉及的关键点。 1. ...

    Qt简单的UDP通信demo

    在本示例中,我们将深入探讨如何在Qt中实现一个简单的UDP(用户数据报协议)通信。UDP是一种无连接的、不可靠的传输层协议,适用于对实时性要求较高的应用,如视频会议、在线游戏等。 首先,我们需要包含必要的Qt...

    UDP 客户端 服务端 网络编程

    - 在实际项目中,UDP常用于实现简单聊天应用、实时音视频传输、分布式系统中的心跳检测等场景。 - 为了保证数据的可靠性,开发者可能需要自己实现重传机制、序列号和确认机制,这在某些场景下是值得的,因为它可以...

    用vb编写的UDP无连接聊天程序

    这个简单的UDP聊天程序只是一个基础示例,实际应用中还需要考虑如何处理并发连接、多用户交互、安全性等问题。你可以根据需求进一步扩展和完善,比如添加用户认证、加密通信、心跳机制等。通过实践,不仅能深入理解...

    c# winform UDP 通讯代码

    请注意,这只是一个基础示例,实际项目中需要根据具体需求进行扩展和优化,比如添加多线程、队列处理、心跳机制等。同时,记得在完成通信后释放资源,调用`client.Close()`关闭UDP客户端。 在使用上述代码时,请...

    Untiy Udp局域网通信整理

    以上就是Unity UDP局域网通信的基本知识和应用,实际开发中还需要结合具体项目需求进行优化和扩展,例如增加心跳机制、处理丢包重传、多线程优化等。提供的资源包含了服务端和客户端示例,可以作为学习和参考的基础...

    UDP P2P打洞代码(加心跳包维持客户端存在)

    在提供的"第10章"文件中,很可能包含了实现UDP P2P打洞的具体代码示例,包括心跳包的发送和接收逻辑。这部分代码通常会涉及以下关键部分: - **初始化**:设置本地监听端口,初始化连接到服务器的socket。 - **心跳...

    c#心跳连接实时检测网络通断情况

    在提供的文件`HClient`和`HServer`中,很可能是实现了心跳连接的客户端和服务端示例代码。分析这些代码可以帮助理解上述概念在实际项目中的应用。通过学习和理解心跳连接的原理与实现,开发者可以创建出更健壮、稳定...

    WPF框架下UDP通讯.zip

    然而,当我们谈论“WPF框架下UDP通讯”时,我们指的是如何在WPF应用中实现基于User Datagram Protocol(UDP)的网络通信。 UDP是一种无连接的传输层协议,相比TCP(Transmission Control Protocol)更加轻量级,不...

    C# udp组播

    本压缩包包含了一个C#实现的UDP组播的示例,分为接收端和发送端两个程序。下面将详细介绍这两个关键部分的工作原理和相关知识点。 1. **UDP组播的基本概念**: - 组播地址:不同于单播和广播,组播使用D类IP地址...

    简单的UDP通信JAVA代码

    本篇文章将详细解析一个基于Java实现的简单UDP通信代码,帮助理解如何在Java中控制超时和重发机制。 首先,我们要了解UDP的基础知识。UDP不保证数据的顺序、完整性或可靠性,它的工作方式更像是“尽力而为”的传输...

    基于HPSocket实现 socket 通讯 - 修正版 ( C# demo 、 C++ dll )

    HPSocket简化了Socket编程的复杂性,提供了一套稳定、高效、易于使用的API,使得断线重连、消息接收与发送、客户端管理等任务变得简单。 2. **Socket通讯原理**: Socket是网络编程中的一个接口,它允许应用程序...

Global site tag (gtag.js) - Google Analytics