java udp 心跳,udp简略通讯示例-心跳示例

当前位置:我的异常网» 软件架构设计 » udp简略通讯示例-心跳示例

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

www.myexceptions.net  网友分享于:2013-09-04  浏览:44次

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

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

Global.setBarStatus(Global.BAR_STATUS_UNONLINE, barList.get(i).toString());

}

}

}

}

}catch(Exception e){

logger.error(e,e);

}

}

}

}

文章评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php如何随机显示图片,php中随机显示图片的函数代码_php

/*********************************************** Filename : img.php* Author : freemousehttp://www.gaodaima.com/?p49284php中随机显示图片的函数代码_php* web : www.cnphp.info* email :freemouse1981gmail.com* Date : 2010/12/27* Usage:* * **********************…

php数组里面写路径,使用路径在PHP数组中进行递归搜索

我会尝试清理一下,但这有效:$needle ["chapter one", foo, bar];$array [["name" > "Intro","id" > "123","children" > ["name" > "foo","id" > &qu…

matlab时域分析论文,基于Matlab语言的数字信号时域相关性研究与分析.doc

摘要:针对在工程测试信号处理过程中广泛存在的信号之间的相关性问题,本文将研究和分析信号之间不同形式的相关关系以及信号在时域中的相关性。从而揭示了信号间关联程度的内在规律。通过举出实例来展示信号相关分析技术在实际工程中的具体应用。最后通过…

php 图片 byte数组,php – 将图像存储在PostgreSQL数据库的bytea字段中

TL; DR:删除addslashes($data).这里多余.双重逃避..两次$datafread($p,filesize($fi));$dataaddslashes($data);$dat pg_escape_bytea($data);您读取数据,将其转义为字符串文字,然后将其转换为bytea八进制或十六进制转义.即使pg_escape_bytea是理智的,它也不会那样,…

页面显示其他php,php – 分页在所有其他页面上显示来自第1页的相同帖子

终于解决了这个:function my_filter_where( $where ) {global $wp_query;if (is_array($wp_query->query_vars[post_status])) {if (in_array(future,$wp_query->query_vars[post_status])) {// posts today into the future$where . " AND post_date …

oracle格式化列宽度,ORACLE日期时间的格式化参数大全

经常遇到有朋友问询关于日期时间格式化的问题(或可以通过格式化轻易解决),经过参考Oracle SQL Reference官方文档,并附上详细的应用示例综合成文,希望能够对大家学习和使用有所帮助。本篇可视为"oracle著名及非著名函数介绍"的补充…

oracle 8i漏洞渗透,一次通过Oracle8i入侵系统之旅(组图)

最近看了些有关Oracle的安全资料,看后随手做了一个渗透测试,把过程记录下来方便日后查阅.先用SuperScan4.0扫描下要测试的主机,速度很快,结果如图1所示:图 1端口 1521 是 Oracle 的 TNS Listener 默认监听的端口,通过扫描报告还可以看到Oracle的版本为8i.现在还不知道对方的操作…

linux系统安装serv u,建立第一个可用的FTP服务器

二、建立第一个可用的FTP服务器1、比如本机IP地址为“192.168.0.48”,已建立好域名“ftp.bbc.com”的相关DNS记录。2、打开Serv-U管理器。选上图的“Serv-U Administrator”,即出现“Setup Wizard”(设置向导)。此向导可以帮你轻松地完成基本设置&#x…

mat 内存分析 Linux,JVM内存分析工具MAT使用简介

# Memory Analyzer使用简介markdown格式渲染异常请阅读附件。- [Memory Analyzer使用简介](#memory-analyzer使用简介)- [MAT 简介](#mat-简介)- [安装](#安装)- [图形界面使用方式](#图形界面使用方式)- [命令行使用方式](#命令行使用方式)- [线程dump](#线程dump)- [堆dump](…

Linux配置scheme环境,用 Xcode Configuration 和 Scheme 配置项目环境

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?想象一个场景,我们正在开发一款支付系统,这个支付系统同时支持有Web版和原生的iOS APP版本。这个支付系统有三个环境:dev: 调用…

linux进入字符界面编程,MPlayer字符界面操作方法

一、启动播放时参数:在终端下敲入:./mplayer 提示各种使用帮助信息-vo 选择视频输出模式和设备(用-vo help查看列表)-ao 选择音频输出模式和设备(用-ao help查看列表)-ss 寻找指定的(多少秒或hh:mm:ss)位置-nosound 不播放声音-fs -vm -zoom …

linux怎么删web应用程序错误,Ubuntu 20.04将删除Amazon Web应用程序,但用户可另行安装...

Ubuntu 20.04将删除Amazon Web应用程序,原因就是这款应用很少有用户使用,但需要的用户也可另行安装。在过去的8年中,Amazon Web应用程序已成为Ubuntu桌面的一部分,现在,Ubuntu 20.04已决定退出。亚马逊网络启动器是在U…

linux 双网卡 debian,Debian 双网卡bond

1. 安装ifenslaveifenslave的作用是网卡的负载均衡# apt-get install ifenslave2. 修改/etc/network/interface复制代码代码如下:{rootb01 359 ~}# cat /etc/network/interfaces# This file describes the network interfaces available on your system# and how to activate t…

C++对象数组与对象指针

C对象数组 1.1数组不仅可以由简单的变量组成,而且还可以由对象组成。 1.2对象数组的初始化: A.如果构造函数只有一个参数,在初始化数组时可以在花括号里提供实参。Student stud[3]{10,18,12}; B.如果构造函数有多个参数,在初始化数组时&a…

linux下sqlmap安装教程,(转)Sqlmap官网下载与安装教程[windows/linux版本]

转自:http://www.vuln.cn/2000sqlmap的功能与强大性不必多言,方便大家下载,给大家整理了下sqlmap最新版的官网与github下载地址。官网下载地址github下载环境与安装windows系统环境安装windows下安装sqlmap需要python环境支持安装好后&#x…

C++共用数据的保护

C中往往通过使用const,来使数据在一定范围内共享又不能被随意修改。 C常对象 1.1常对象的一般形式为:A.Time const t(1,2,3);B.const Time t(1,2,3);1.2常对象的数据成员都是常变量而且必须要有初值。1.3不能调用常对象的非const型的成员函数&#xff0…

linux gcc本地链接lib文件(c静态,动态),GCC中静态连接和动态连接的区别(LINUX下)...

最近正在学习库的用法,写了最基础的libmystring.a的库(里面只有一个add函数),然后编写test程序测试add函数,用ar命令创建好libmystring.a库后,用以下命令编译静态连接的a.outgcc –static test.c –L ./ –lmystring –o a.out得到…

C++对象的动态建立和释放

1.1前面的方法是静态的&#xff0c;而在c中要动态的建立对象可以用new&#xff0c;删除对象用delete。 C对象动态建立和释放 1.1用new运算符之后&#xff0c;返回一个指向新对象的指针。Box *ptnew Box(1,2,3);1.2通过pt来访问这个对象cout << pt->height;cout <&…

linux18.04循环登陆,ubuntu18.04 循环登陆

主要原因是驱动不对&#xff0c;重新按装驱动就是了&#xff0c;按以下步骤进行&#xff1a;1、sudo apt-get remove --purge nvidia-*2、sudo apt-get autoremove3、sudo reboot重新启动后&#xff1a;sudo ubuntu-drivers autoinstallubuntu 18.04 不同桌面的切换 gdm3/light…

C++对象的赋值和复制

C对象的赋值 1.1对象之间的赋值是用“”运算符来实现的&#xff0c;“”在c中扩展为重载运算符来实现对象间的赋值。t1t2;1.2对象赋值是对数据成员的赋值&#xff0c;而不是对成员函数的赋值。因为数据成员占用内存空间&#xff0c;而成员函数只是一段共用代码。1.3类的数据成员…