如何禁用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
相关产品推荐
相关产品推荐

