📄 udpreceive.java~2~
字号:
package zjkdata;
import java.io.*;
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.lang.*;
import java.util.*;
import javax.swing.*;
import java.util.Date;
import java.lang.String;
import java.awt.event.*;
import java.util.Calendar;
import javax.swing.border.*;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.StringTokenizer;
import com.adventnet.snmp.snmp2.*;
import java.text.SimpleDateFormat;
import javax.swing.table.DefaultTableModel;
import java.io.UnsupportedEncodingException;
import javax.swing.table.DefaultTableCellRenderer;
/**
* <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 revDateArray[];
private Connection Conn;
private Statement Stmt;
private ResultSet Rs;
private String DBUrl = "jdbc:odbc:datalink";
String almstate[]={" "," "," "};
String almtime[]={" "," "," "};
String almmessage[]={" "," "," "};
String[] columnNames = {"等级","告警时间","接收到的UDP告警消息"};
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];
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 ) {
revDate = new String(revByte, 0, dataPacket.getLength(),"utf-8");
if(revDate.indexOf("-ON")>0|| revDate.indexOf("-OFF")>0)
{
int i = 0;
while (revDateDiv.hasMoreTokens()){
revDateArray[i] = revDateDiv.nextToken().trim();
messageDate = messageDate + "/" + revDateArray[i];
i++;
}
else if ()
{
}
else ;
StringTokenizer revDateDiv = new StringTokenizer(revDate.trim(), " ", false);
System.out.println("all is " + revDateDiv.countTokens());
int i = 0;
while (revDateDiv.hasMoreTokens()){
revDateArray[i] = revDateDiv.nextToken().trim();
System.out.println(revDateArray[i]);
i++;
}
/**
StringTokenizer revDateDiv = new StringTokenizer(revDate.trim(), "\n", false);
System.out.println("all is " + revDateDiv.countTokens());
int i = 0;
while (revDateDiv.hasMoreTokens()){
revDateArray[i] = revDateDiv.nextToken().trim();
System.out.println(revDateArray[i]);
i++;
}
**/
/**
revDate = new String(revByte, 0, dataPacket.getLength(),"utf-8");
StringTokenizer revDateDiv = new StringTokenizer(revDate.trim(), "\n", false);
System.out.println("all is " + revDateDiv.countTokens());
int i = 0;
while (revDateDiv.hasMoreTokens()){
revDateArray[i] = revDateDiv.nextToken().trim();
messageDate = messageDate + "/" + revDateArray[i];
i++;
}
System.out.println(messageDate.length());
//保存UDP数据到数据库,每天创建一个新表,表名:udpdata_(date);
Calendar TodayCanlendar=Calendar.getInstance();
Date TodayDate=TodayCanlendar.getTime();
String str_datetime=DateFormat.format(TodayDate);
String str_date = str_datetime.substring(0,10);
try{
String tableName = "udpdata_"+str_date;
System.out.println("表名:"+tableName);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Conn = DriverManager.getConnection(DBUrl);
Stmt = Conn.createStatement();
String sqlInsert = "insert into " + tableName +" (revtime,messagedate) values('"+str_datetime+"','"+messageDate+"')";
//判断表是否存在,存在直接插入新纪录,不存在创建新表并插入新纪录
Rs = Conn.getMetaData().getTables(null, null, tableName, null);
if (Rs.next()) {
Stmt.executeUpdate(sqlInsert);
Conn.commit();
}
else {
//新的一天,创建一个新表并保存数据
String sqlCreateTable = "create table " + tableName + " (dataid counter, revtime varchar(20),messagedate varchar(250))";
Stmt.executeUpdate(sqlCreateTable);
Conn.commit();
Stmt.executeUpdate(sqlInsert);
Conn.commit();
Stmt.close();
}
Conn.close();
}
catch(Exception ex){
///////////////////////////////////////////////////
System.out.println("aaaaaaa");
}
if (revDateArray[1].trim().equals("4")) {
revDateArray[1] = "开关量";
}
if (revDateArray[1].trim().equals("5")) {
revDateArray[1] = "模拟量";
}
switch(Integer.parseInt(revDateArray[3].trim())){
case 1:
revDateArray[3] = "未知告警类型";
case 2:
revDateArray[3] = "正常";
case 3:
revDateArray[3] = "越上限";
case 4:
revDateArray[3] = "越上上限";
case 5:
revDateArray[3] = "越下限";
case 6:
revDateArray[3] = "越下下限";
case 7:
revDateArray[3] = "开关跳变";
default:
revDateArray[3] = "未知告警类型";
}
//JTable中显示的数据
almstate[0] = almstate[1];
almstate[1] = almstate[2];
almstate[2] = revDateArray[5];
almtime[0] = almtime[1];
almtime[1] = almtime[2];
almtime[2] = str_datetime;
almmessage[0] = almmessage[1];
almmessage[1] = almmessage[2];
if (revDateArray[1] == "开关量") {
almmessage[2] = revDateArray[22] + ";" +
revDateArray[24] +":"+ revDateArray[27] + ";开关量;" + revDateArray[3] +
";当前值:" + revDateArray[15] + ";原来值:" + revDateArray[16];
}
if (revDateArray[1] == "模拟量") {
almmessage[2] = revDateArray[22] + ";" +
revDateArray[24] +":"+ revDateArray[27] + ";开关量;" + revDateArray[3] +
";当前值:" + revDateArray[13] + ";原来值:" + revDateArray[14];
}
DefaultTableModel tableModel = (DefaultTableModel) Main.dataTable.
getModel();
i=0;
for(i =0; i < 3 ;i++){
System.out.println(almstate[i]+almtime[i]+almmessage[i]);
String[] str_row={almstate[i],almtime[i],almmessage[i]}; //将一行的数据存在str_row 字符串数组里
tableModel.addRow(str_row);
tableModel.removeRow(0);
}
Main.dataTable.setModel(tableModel);//
//调用Trap发送方法
SnmpV1TrapSend snmpv1trapsend = new SnmpV1TrapSend();
try {
System.out.println("aaaa");
snmpv1trapsend.TrapSend(revDateArray,TrapIp1,TrapPort);
snmpv1trapsend.TrapSend(revDateArray,TrapIp2,TrapPort);
}
catch (Exception eee) {
}
**/
}
}
if(!dataSocket.isClosed()){
dataSocket.close();
}
}
catch (IOException e) {
}
}
public synchronized boolean getFlag() {
return runFlag;
}
public synchronized void stopReceive(){
runFlag = false;
if (runThread != null){
runThread.interrupt();
if(!dataSocket.isClosed()){
dataSocket.close();
}
System.out.println(runThread.getName() + "线程停止!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -