首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >J8583: ISO8583 MessageFactory没有消息类型"ffffff50“的解析指南。

J8583: ISO8583 MessageFactory没有消息类型"ffffff50“的解析指南。
EN

Stack Overflow用户
提问于 2021-08-10 14:38:20
回答 1查看 294关注 0票数 3

我试图在套接字上编写一个类似ISO服务器的存根。当我收到这条消息时,我会得到这样的信息:

代码语言:javascript
复制
[pool-1-thread-5] ERROR com.solab.iso8583.MessageFactory - ISO8583 MessageFactory has no parsing guide for message type ffffff50 [ r$$? ??A??#9i.....

控制台中的消息:

代码语言:javascript
复制
Parsing incoming message:  r$$? ??A??#@&       i?....

我不知道我收到了什么留言..。

为什么它有这么奇怪的编码?我怎么才能解决呢?

服务器代码:

代码语言:javascript
复制
public class SocketServer implements Runnable {
    private static final Log log = LogFactory.getLog(SocketServer.class);
    private static ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(5);
    private static MessageFactory messageFactory;
    private Socket socket;

    public SocketServer(Socket socket){
        this.socket = socket;
    }

    public void run() {
        int count = 0;
        byte[] bufferLenght = new byte[2];
        try{
            while (socket != null && socket.isConnected()
                    && Thread.currentThread().isAlive()
                    && !Thread.currentThread().isInterrupted()){
                if (socket.getInputStream().read(bufferLenght) == 2){
                    int size = ((bufferLenght[0] & 0xff) << 8) | (bufferLenght[1] & 0xff);
                    byte[] buffer = new byte[size];
                    socket.getInputStream().read(buffer);
                    count++;
                    threadPool.schedule(new Processor(buffer, socket), 400, TimeUnit.MILLISECONDS);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        log.debug(String.format("Count of requests: %d", count));
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

处理器,处理消息.

代码语言:javascript
复制
    private class Processor implements Runnable{

        private byte[] message;
        private Socket socket;

        public Processor(byte[] buffer, Socket socket){
            this.message = buffer;
            this.socket = socket;
        }

        public void run() {
            try{
                System.out.println(String.format("Parsing incoming message: %s", new String(message)));
                IsoMessage request = messageFactory.parseMessage(message,4);
                IsoMessage response = messageFactory.createResponse(request);
                response.setField(11, request.getField(11));
                response.setField(7, request.getField(7));
                response.write(socket.getOutputStream(), 2);
            } catch (ParseException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

代码语言:javascript
复制
    public static void main(String[] args) throws IOException {
        messageFactory = ConfigParser.createFromClasspathConfig("config.xml");
        System.err.println("Setting up server socket...");
        ServerSocket serverSocket = new ServerSocket(8583);
        System.err.println("Waiting for connections...");
        while (true){
            Socket socket = serverSocket.accept();
            System.err.println(String.format("New connection from %s:%d", socket.getInetAddress(), socket.getPort()));
            new Thread(new SocketServer(socket),"iso8583 server").start();
        }
    }
}

我的config.xml的一部分

代码语言:javascript
复制
    <parse type="0100">
        <field num="2" type="NUMERIC" length="20" />
        <field num="3" type="NUMERIC" length="6" />
        <field num="4" type="AMOUNT" />
        <field num="7" type="DATE10" />

..............

        <field num="62" type="LLLVAR" />
        <field num="63" type="LLLVAR" />
        <field num="64" type="LLLVAR" />
    </parse>

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-12 01:23:45

好像这条消息是二进制编码的,你没想到吗?或者相反,也许(消息是ASCII编码的,您正在尝试将其读取为二进制编码)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68728814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档