📄 udpreceive.java
字号:
package zjkdata;
import java.io.*;
import java.net.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import java.util.Date;
import java.util.regex.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class UdpReceive
extends Thread {
private volatile boolean runFlag;
private Thread runThread;
private String TrapPort, TrapIp1, TrapIp2;
private int UdpPort;
private volatile DatagramSocket dataSocket;
private DatagramPacket dataPacket;
private byte revByte[];
private String revDate;
private String alarmplace;
private String revDateArray[], revDtatenull[];
private String revDateys[];
private String month[];
private Connection Conn;
private Statement Stmt;
private ResultSet Rs;
private String DBUrl = "jdbc:odbc:datalink";
String almstate[] = {
" ", " ", " "};
String almtime[] = {
" ", " ", " "};
String almmessage[] = {
" ", " ", " "};
String[] columnNames = {
"等级", "告警时间", "接收到的UDP告警消息"};
Pattern p1;
Matcher m1;
String regEx1;
boolean result1;
String SendFlag;
String alarming="false";
public void run() {
runThread = Thread.currentThread();
runFlag = true;
SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy_MM_dd HH:mm:ss");
//获取udp接收端口参数
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Conn = DriverManager.getConnection(DBUrl);
Stmt = Conn.createStatement();
Rs = Stmt.executeQuery("Select * from parameter");
if (Rs.next()) {
UdpPort = Integer.parseInt(Rs.getString("udpport"));
TrapPort = Rs.getString("trapport");
TrapIp1 = Rs.getString("trapip1");
TrapIp2 = Rs.getString("trapip2");
}
Conn.close();
Stmt.close();
}
catch (Exception eee) { //数据库读取异常
}
try {
dataSocket = new DatagramSocket(UdpPort);
revByte = new byte[2000];
revDateArray = new String[100];
revDateys = new String[100];
dataPacket = new DatagramPacket(revByte, revByte.length);
revDate = "";
int revDataNumber = 0;
while (getFlag()) {
Main.SystemLable.setForeground(Color.blue);
revDataNumber++;
//等待接受UDP数据
dataSocket.receive(dataPacket);
try {
Main.SystemLable.setIcon(new ImageIcon(
"image/statusrun.png"));
}
catch (Exception ex) {
//异常处理
}
Main.SystemLable.setText("系统运行状态:数据采集正在运行,接收到" + revDataNumber +
"条告警数据!");
String messageDate = "";
if (dataPacket.getLength() > 0) {
//确定告警位置
for (int i = 0; i < 100; i++) {
revDateArray[i] = "";
} //把数组里面的数据清空
//获取udp发送端IP地址,根据IP地址找到告警的站点
try {
InetAddress sourceIP = dataPacket.getAddress();
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Conn = DriverManager.getConnection(DBUrl);
Stmt = Conn.createStatement();
// Rs = Stmt.executeQuery(
// "Select NEname from DeviceNE where SourceIP=SourceIP");
Rs = Stmt.executeQuery(
"Select NEname from DeviceNE where SourceIP=SourceIP");
if (Rs.next()) {
revDateArray[0] = Rs.getString("NEname");
}
Conn.close();
Stmt.close();
}
catch (SQLException ex1) {
System.out.println("SQLException ex1");
}
catch (ClassNotFoundException ex1) {
System.out.println("ClassNotFoundException ex1");
}
System.out.println(revDateArray[0]);
revDate = new String(revByte, 3, dataPacket.getLength() - 3, "utf-8");
System.out.println(revDate);
String regEx1 = "([0-9]{2}-[0-9]{2}-[0-9]{2})";
Pattern p1 = Pattern.compile(regEx1);
Matcher m1 = p1.matcher(revDate);
boolean result1 = m1.find();
while (result1) {
alarmplace = m1.group();
revDateArray[6] = alarmplace.substring(0, 2);
revDateArray[7] = alarmplace.substring(3, 5);
revDateArray[8] = alarmplace.substring(6);
break;
}
//将数据按照空格拆分
StringTokenizer revDateDiv = new StringTokenizer(revDate.trim(), " ", false);
int Divnum = revDateDiv.countTokens();
int i = 0;
while (revDateDiv.hasMoreTokens()) {
revDateys[i] = revDateDiv.nextToken().trim();
i++;
}
for (i = 12; i < Divnum; i++) {
revDateArray[11] = revDateArray[11] + " " + revDateys[i];
}
revDateArray[1] = revDateys[0];
revDateArray[2] = revDateys[1];
revDateArray[3] = revDateys[2];
revDateArray[4] = revDateys[3];
revDateArray[5] = revDateys[5];
revDateArray[9] = revDateys[8];
revDateArray[10] = revDateys[9] + " " + revDateys[10];
//分类1,包含-ON和-OFF时的情况
if (revDate.indexOf("-ON") > 0) {
alarming = "true";
}
if (revDate.indexOf("-OFF") > 0) {
revDateArray[1] = "5";
}
//分类2,三个字段匹配,告警号确定开始、结束:018开始,019结束
else if (revDateArray[4].equals("DTUCTL")) {
switch (Integer.parseInt(revDateArray[5].trim())) {
case 18:
alarming = "true";
break;
case 19:
revDateArray[5] = "018";
revDateArray[1] = "5";
break;
default:
break;
}
}
//port 003 004 告警位置只和槽位的前两位有关,告警号确定开始003、结束004
else if (revDateArray[4].equals("PORT")) {
switch (Integer.parseInt(revDateArray[5].trim())) {
case 3:
revDateArray[8] = " ";
alarming = "true";
break;
case 4:
revDateArray[8] = " ";
revDateArray[1] = "5";
revDateArray[5] = "003";
break;
default:
break;
}
}
//shelf确定故障位置,告警号确定告警开始,结束
else if (revDateArray[4].equalsIgnoreCase("UTS_HW")) {
int len = revDateArray[11].length();
switch (Integer.parseInt(revDateArray[5].trim())) { //告警开始的告警号
case 005:
case 006:
case 007:
case 70:
case 133:
case 134:
case 135:
case 198:
case 004:
case 012:
case 132:
case 140:
case 002:
case 130:
case 003:
case 010:
case 011:
case 013:
case 14:
case 15:
case 21:
case 22:
case 23:
case 68:
case 72:
case 74:
case 76:
case 78:
case 80:
case 82:
case 86:
case 131:
case 138:
case 139:
case 141:
case 142:
case 143:
case 149:
case 150:
case 151:
case 196:
case 200:
case 202:
case 204:
case 206:
case 208:
case 210:
case 214:
revDateArray[6] = revDateArray[11].substring(len - 4, len);
alarming = "true";
break;
//告警恢复的告警号
case 37:
revDateArray[5] = "005";
revDateArray[1] = "5";
revDateArray[6] = revDateArray[11].substring(len - 4, len);
break;
case 165:
revDateArray[5] = "133";
revDateArray[1] = "5";
revDateArray[6] = revDateArray[11].substring(len - 4, len);
break;
case 38:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -