⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udpreceive.java

📁 这是一个udp接收程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
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 + -