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

📄 udpreceive.java~3~

📁 这是一个udp接收程序
💻 JAVA~3~
📖 第 1 页 / 共 2 页
字号:
package zjkdata;

import java.io.*;
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.lang.*;
import java.lang.Long;
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;
import java.util.regex.*;

/**
 * <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;
  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]="";}//把数组里面的数据清空

            revDate = new String(revByte, 3, dataPacket.getLength()-3, "utf-8");
             //revDate = new String(revByte, 3, dataPacket.getLength(),"US-ASCII");

            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[0] = "zjk";
              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,包含-OFF时的情况
           if (revDate.indexOf("-OFF") > 0)
               {revDateArray[1]="5";}
               //分类2,三个字段匹配,告警号确定开始、结束018,019
          else if (revDateArray[4].equals("DTUCTL"))
                 {
                    switch (Integer.parseInt(revDateArray[5].trim()))
                    {
                        case 19:
                        revDateArray[5] = "018";
                        revDateArray[1] = "5";
                        break;
                        default: break ;
                    }
                  }
                  //port 003 004 告警位置只和槽位的前两位有关,告警号确定开始、结束
          else if (revDateArray[4].equals("PORT"))
                 {
                    switch (Integer.parseInt(revDateArray[5].trim()))
                    {
                        case 3:revDateArray[8]=" "; 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:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -