gpt4 book ai didi

java - J8583: ISO8583 MessageFactory 没有消息类型 "ffffff50"的解析指南

转载 作者:行者123 更新时间:2023-12-04 17:15:56 25 4
gpt4 key购买 nike

我尝试编写一个在套接字上模拟 ISO 服务器的 stub 。当我收到消息时,我得到类似这样的信息:

[pool-1-thread-5] ERROR com.solab.iso8583.MessageFactory - ISO8583 MessageFactory has no parsing guide for message type ffffff50 [ r$$? ??A??#9i.....

控制台消息:

Parsing incoming message:  r$$? ??A??#@&       i?....

我不知道我收到的消息类型..

为什么它有这么奇怪的编码?我该如何解决?

服务器代码:

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();
}
}

class processor 处理消息...

    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();
}
}
}

主要

    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 的一部分:

    <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>

提前致谢!

最佳答案

消息似乎是二进制编码的,您没想到会这样?或者反过来,也许(消息是 ASCII 编码的,你正试图以二进制编码读取它)

关于java - J8583: ISO8583 MessageFactory 没有消息类型 "ffffff50"的解析指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68728814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com