(Java)多客户端在线情况侦测程序

#说明:系统开发中,存在对客户端在线情况进行侦测的需求,比如,核心服务器与数据库、中间件等的连通性等,为此开发一个侦测程序,实现基本功能。如需进一步的增强,判断和决策等,需进一步结合具体需求优化。

服务端:

实现逻辑:

1,创建DatagramSocket对象socket,指定服务端口6666,作为接收端对象

2,创建个数组,用于封装DatagramPacket,byte[] buffer = new buffer[1024 *64];

3,创建DatagramPacket对象packet,作为接收数据包,指定参数:数据字节buffer、长度。

3,Api调用获取信息并存入buffer字节数组,socket .receive(packet);

4,String receiveMessage = new String(buffer);

代码实现:

package udp;

import java.io.FileWriter;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;

public class Server {
    public static void main(String[] args) throws Exception {
        final DatagramSocket socket = new DatagramSocket(6666);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
        SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("日志系统启动成功!" + simpleDateFormat1.format(new Date()));
        System.out.println("-------------------------------------");
        final FileWriter fileWriter = new FileWriter("connectLog" + simpleDateFormat.format(new Date())  +".txt",true);
        byte[] buffer = new byte[1024 * 64 ] ;
        final DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
        while (true) {
            socket.receive(packet);
            final int length = packet.getLength();
            System.out.println(  packet.getAddress().getHostAddress() + ":" +  packet.getPort()   + new String(buffer,0,length));
            //写出到文件
            fileWriter.write(packet.getAddress().getHostAddress() + ":" +  packet.getPort()   + new String(buffer,0,length)+ "\n");

            fileWriter.flush();

        }
    }
}

客户端:

实现逻辑:

1,创建DatagramSocket对象socket,作为发送端对象

2,准备”在线信息“,封装成字节数组,用于封装进DatagramPakcet对象

如:设备1连接成功! 2025-09-29 15:37

3,创建DatagramPacket对象packet ,作为发送数据包,指定参数:数据字节buffer,长度,接收端IP,接收端端口6666(与服务端一致)

4, Api调用发送信息: socket.sent(packet);

代码实现:

package udp;

import java.io.IOException;
import java.net.*;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;

public class Client {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket();

        while (true) {

            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            String nowTime  = simpleDateFormat.format(new Date());
            String activeThing = " 连接成功! " + nowTime  ;
            byte[] successBuffer = activeThing.getBytes();

            DatagramPacket packet = new DatagramPacket(successBuffer,successBuffer.length, InetAddress.getLocalHost(),6666);

            socket.send(packet);
            System.out.println("发送成功!" + nowTime);

            Thread.sleep(1000 * 60 * 60);
        }

    }
}

运行展示:

多客户端运行:

写出到外部文件:

该程序通过UDP通信,实现了客户端与服务端的“心跳”,以检测客户端在线情况。代码仅实现了通信,但未进一步增加判断和决策,例如;如何根据心跳,判断哪些客户端离线,离线后出发何种决策和动作,需要各位猿友结合具体需求,进一步完善,一同打磨出一个满足场景化的需求。

恳请留言,沟通。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值