826220679@qq.com
10 天以前 fb883547ede83b1c758b1a9a025898ba3f83497a
src/udptcp/PacketProcessingSystem.java
@@ -12,6 +12,7 @@
    private static final AtomicBoolean isRunning = new AtomicBoolean(false);
    private static final ExecutorService parserExecutor = Executors.newSingleThreadExecutor();
    private static Thread parserThread;
    private static boolean a1=true;
    // 报文存储结构
    public static class HexPacket {
@@ -26,10 +27,30 @@
            this.hexData = hexData;
            this.timestamp = timestamp;
        }
      public String getIp() {
         return ip;
      }
      public int getPort() {
         return port;
      }
      public String getHexData() {
         return hexData;
      }
      public long getTimestamp() {
         return timestamp;
      }
    }
    // 接收端存储报文(UDPPortAReceiver中调用)
    public static void storePacket(String ip, int port, String hexData) {
       if(a1) {
          startProcessing();
          a1=false;
       }
        if (packetQueue.size() < 100000) { // 限制队列大小防止OOM
            packetQueue.offer(new HexPacket(ip, port, hexData, System.currentTimeMillis()));
        }
@@ -52,7 +73,9 @@
                
                try {
                    // 转换HEX为字节数据
                    byte[] rawData = PacketParser.hexStringToBytes(packet.hexData);
                    byte[] rawData = PacketParser.hexStringToBytes(packet.hexData);
                    String ip=packet.getIp();
                    int port=packet.getPort();
                    // 追加到缓冲区并解析
                    bufferManager.appendData(rawData, rawData.length);
                    List<PacketParser.DataPacket> parsedPackets = bufferManager.parsePackets();
@@ -62,9 +85,9 @@
                        // 根据包头类型路由到不同解析器
                        switch (p.getPacketType()) {
                            case 0x01:
                                processType01(p);break;
                                processType01(p,ip,port);break;
                            case 0x02:
                                processType02(p);break;
                                processType02(p,ip,port);break;
                            
                            default:
                                System.err.println("未知包类型: " + p.getPacketType());
@@ -90,12 +113,12 @@
    }
    // 示例解析方法(需根据实际协议实现)
    private static void processType01(PacketParser.DataPacket packet) {
       String hexData = PacketParser.bytesToHexString(packet.getPacket());
        Dell55AA01Parser.parse(hexData);
    private static void processType01(PacketParser.DataPacket packet,String ip,int port) {
       String hexData = PacketParser.bytesToHexString(packet.getPacket());
        Dell55AA01Parser.parse(hexData,ip,port);
    }
    private static void processType02(PacketParser.DataPacket packet) {
    private static void processType02(PacketParser.DataPacket packet,String ip,int port) {
        System.out.println("处理55AA02包: " + packet);
        // 实际业务逻辑
    }