//发送心跳
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);
}
}
}
}
分享到:
相关推荐
头歌UDP Ping程序实现-客户端创建UDP套接字头歌UDP Ping程序实现-客户端创建UDP套接字头歌UDP Ping程序实现-客户端创建UDP套接字头歌UDP Ping程序实现-客户端创建UDP套接字头歌UDP Ping程序实现-客户端创建UDP套接...
头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收并转发消息头歌UDP Ping程序实现-接收...
头歌UDP Ping程序实现-服务端模拟丢包事件头歌UDP Ping程序实现-服务端模拟丢包事件头歌UDP Ping程序实现-服务端模拟丢包事件头歌UDP Ping程序实现-服务端模拟丢包事件头歌UDP Ping程序实现-服务端模拟丢包事件头歌...
头歌UDP Ping程序实现-客户端向服务器发送消息并接收消息.txt头歌UDP Ping程序实现-客户端向服务器发送消息并接收消息.txt头歌UDP Ping程序实现-客户端向服务器发送消息并接收消息.txt头歌UDP Ping程序实现-客户端向...
Visual C++设计UDP协议通讯示例.doc Visual C++设计UDP协议通讯示例.doc Visual C++设计UDP协议通讯示例.doc Visual C++设计UDP协议通讯示例.doc
UDP转发脚本udp-forwarding--udp-forward-master.zip
udp控制舵机udp-controller-serivo-master.zip
C# socket编程 上位机一键修改plc参数 汇川TCP/UDP socket通讯示例,亲测可用,适合学习 通讯相关程序写成库,都是源码,可以直接复用 关键代码注释清晰 支持汇川全系列plc的modbusTCP通讯, 可以导入导出变量表
很多人需要实现gSOAP-UDP异步通讯,本人把原有gSOAP的生成类进行了派生,使其能够进行异步通讯。并且实现UDP打洞。示例代码意图是做DVR的客户端和服务端开发,使用这可以在此基础上进行修改,用于其他用途。
NI veristand UDP通讯custom-device
这个是·基于Delphi开发的UDP广播和单薄的通讯示例,附有代码
基于Qt的udp socket源代码,简要的描述了通信过程
C#实现与欧姆龙PLC以太网通讯源码-Fins UDP/Fins TCP
基于官方server_demo.lua的修改,配合:合宙Air105|Socket|UDP |TCP/IP|W5500|TCP&UDP测试|服务器|客户端|官方demo|学习(8-2):Socket网络接口- UDP |TCP/IP连接示例使用:server_demo.lua 引用方式: require ...
UDP广播简单示例 有研究或探讨或开源的请加群:37424970 或联系本人MSN或邮箱:zhuseahui@yahoo.com.cn
C++ UDP通讯,实现了UDP客户端与服务器的相互通讯
X-Plane11UDP通讯说明文档(中文翻译版,以及英文原版),可以作为插件开发的通讯接口参考资料
Java网络编程基础-基于UDP的网络编程-1
TCP UDP C++编程示例,简单的例子
该资源可以提供简单的UDP通讯服务,客户端和服务器端都包含