java - 如何修复Java ISO8583套接字错误: TRANSMISSION ERROR

标签 java sockets iso8583

我正在做一个项目,这个错误一直让我头疼。我正在利用 Java J8583 库构建 ISO8583 消息并发送给远程服务器。服务器的响应是一个十六进制值:5452414E53414354494F4E204552524F52,转换为 ASCII 时:传输错误。

// function to construct Message
public IsoMessage createLoadRequest(String tag) {
IsoMessage nManagementMsg = messageFactory.newMessage(0x0800);
Date date = new Date();

String terminalID = new Utils().retrieveTerminalID(); 


nManagementMsg.setField(3, new IsoValue<Object>(IsoType.ALPHA, tag, 6));
nManagementMsg.setField(7, new IsoValue<Object>(IsoType.NUMERIC, utcTime.format(date), 10));
lastTransactionAuditCode = Utils.randomAlphaNumeric(6);
nManagementMsg.setField(11, new IsoValue<Object>(IsoType.NUMERIC, lastTransactionAuditCode, 6)); // System Trace Audit Number
nManagementMsg.setField(12, new IsoValue<>(IsoType.NUMERIC, localTime.format(date), 6));
nManagementMsg.setField(13, new IsoValue<>(IsoType.DATE_EXP, localDate.format(date), 4));
nManagementMsg.setField(41, new IsoValue<Object>(IsoType.ALPHA, terminalID, 8));

return nManagementMsg;
}

//function to make send Message to server
public boolean retrieveData() throws UnsupportedEncodingException {

IsoMessage networkManagementMsg = this.createLoadRequest("567YUY");

String strToSend = new String(networkManagementMsg.writeData());

if (!start()) {
    return false;
}

try {

        logger.info(strToSend);

    outputStream.writeUTF(strToSend);
    IsoMessage response = readMessage();
    final String result = response.getAt(39).toString();

    if (!result.equals("00")) {
        logger.log(Level.WARNING, "Network Management Response contains a non-zero result code {0}", result);
        return false;
    }

    // parse and get required data
    String value = response.getAt(62).toString();
    System.out.println(value);


    return true;
 } catch (Exception ex) {
    logger.severe("Exception while loading terminal info");
    ex.printStackTrace();
    return false;
} finally {
    stop();
}
}

我期待 ISOMessage 返回错误:

INFO: 08002238000000800000567YUY0515135835Q56U46135835051520390013

INFO: Received response: 5452414E53414354494F4E204552524F52

INFO: IsoMessage: null

java.io.IOException: Failed to parse iso message string: 

5452414E53414354494F4E204552524F52

最佳答案

如果没有更大的项目背景和要打包的每个字段的值,很难说,但您的请求看起来很奇怪。 STAN(字段 11)应该是数字,但包含字母。另外,您应该检查终端 ID(字段 41)的编码,因为它可能是直接构建的 8 字节,但在某些系统中我看到使用十六进制编码的 16 字节。

关于java - 如何修复Java ISO8583套接字错误: TRANSMISSION ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152111/

相关文章:

c# - C#和Flex之间的套接字通信问题

c# - AcceptSocket 超时?

带用户界面的 ISO8583 模拟器

java - 如何通过电话线发送数据到ISO8583主机(拨号NAC),客户端是JAVA?

java - JDepend 依赖约束失败

java - 如何从 Oracle JDBC PreparedStatement 对象获取绑定(bind)参数的值

delphi - TCP 客户端未接收到来自 RTSP 服务器的响应

java - 发送 ISO8583 请求时出现 NullPointerException

java - 使用 PDFBox 将页面添加到 PDF/A 文件,而不会丢失 PDF/A 的有效性

java - 当我尝试使用 .getText() 时,JTextField 想成为最终结果