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

写出到外部文件:

515

被折叠的 条评论
为什么被折叠?



