You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁用BASE24TCPChannel在ISO消息末尾添加的03十六进制字符?

jPOS发送ISO消息末尾自动添加03字符的解决方法

问题描述

发送带头部的ISO消息时,消息末尾总会被自动添加一个十六进制的03字符。

发送代码

// Create Packager based on XML that contain DE type
GenericPackager packager = new GenericPackager("PackISO.xml");

// Crea una instancia de la clase BASE24TCPChannel
BASE24TCPChannel c = new BASE24TCPChannel("localhost", 5000,packager);
c.setHeader("ISO008000099");
    
// Create ISO Message
ISOMsg isoMsg = new ISOMsg();        
isoMsg.setPackager(packager);

isoMsg.setMTI("0800");
isoMsg.set(7, "1088110140");
isoMsg.set(11, "087478");
isoMsg.set(70, "999");

c.connect();
c.send(isoMsg);

捕获到的发送内容(xxd输出)

00000000: 0044 4953 4f30 3038 3030 3030 3939 3038  .DISO00800009908
00000010: 3030 3832 3230 3030 3030 3030 3030 3030  0082200000000000
00000020: 3030 3034 3030 3030 3030 3030 3030 3030  0004000000000000
00000030: 3030 3130 3838 3131 3031 3430 3038 3734  0010881101400874
00000040: 3738 3939 3903                           78999.

可以看到消息末尾的03字符(对应ASCII文本结束符ETX)。

解决方案

这个03字符是BASE24TCPChannel默认追加的ETX结束标记,要禁用它,只需在设置通道头部后添加一行代码,调用setEtx(null)方法:

// Create Packager based on XML that contain DE type
GenericPackager packager = new GenericPackager("PackISO.xml");

// Crea una instancia de la clase BASE24TCPChannel
BASE24TCPChannel c = new BASE24TCPChannel("localhost", 5000,packager);
c.setHeader("ISO008000099");
// 禁用默认的ETX结束符
c.setEtx(null);
    
// Create ISO Message
ISOMsg isoMsg = new ISOMsg();        
isoMsg.setPackager(packager);

isoMsg.setMTI("0800");
isoMsg.set(7, "1088110140");
isoMsg.set(11, "087478");
isoMsg.set(70, "999");

c.connect();
c.send(isoMsg);

原理说明

BASE24TCPChannel的默认行为是在消息打包完成后,追加一个ETX(0x03)字节作为消息结束的标识。调用setEtx(null)会告知通道不添加任何结束符,这样发送的消息末尾就不会再出现03字符了。

内容的提问来源于stack exchange,提问作者Raul Roa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:43:26