позвольте мне задать свои вопросы об iso8583 с Java, поэтому у меня возникли проблемы при создании сообщения ISO8583 с новой системой с JPOS Java (система, которую я разрабатываю), поэтому я пытаюсь сопоставить сгенерированное сообщение iso8583 старой системой, и когда я попытался сравнить сообщение iso8583, сгенерированное новой системой, с помощью сетевого анализатора (wireshark), оно не соответствует сообщению.
Шестнадцатеричный дамп старой системы
00000000 65 e
00000001 49 53 4f 30 30 36 30 30 30 30 36 30 30 38 30 30 ISO00600 00600800
00000011 38 32 32 30 30 30 30 30 30 30 30 30 30 30 30 30 82200000 00000000
00000021 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 04000000 00000000
00000031 30 34 31 38 30 37 34 32 31 37 30 30 30 30 30 31 04180742 17000001
00000041 30 30 31 03 001.
Новый системный шестнадцатеричный дамп
00000000 49 53 4f 30 30 36 30 30 30 30 31 30 30 38 30 30 ISO00600 00100800
00000010 38 32 32 30 30 30 30 30 30 30 30 30 30 30 30 30 82200000 00000000
00000020 30 34 30 30 30 30 30 30 30 30 30 30 30 30 30 30 04000000 00000000
00000030 30 34 31 38 31 30 30 31 33 39 31 37 30 31 33 39 04181001 39170139
00000040 31 36 31 03 161.
Как мы видим, я пытаюсь отправить сообщение 0800 на тот же сервер ISO, но у меня другой результат байтового сообщения, также я пытался использовать другой канал, кажется, что BASE24Channel из библиотеки JPOS имеет самое близкое совпадение, но он все еще отсутствует первый байт (перед частью заголовка ISO), кто-нибудь может мне помочь? Я полагаю, мне нужно разработать собственный класс каналов? поправьте меня, если я ошибаюсь, и спасибо за помощь: D
Привет @AndrésAlcarraz, вот в чем вопрос, как мне сгенерировать e (первое байтовое сообщение) в моем новом системном коде, в моей новой системе я использую BASE24Channel по умолчанию по ссылке JPOS Lib для создания дампа (без e
)
И мой вопрос к вам был таков: как узнать, какое значение должен иметь этот префикс, всегда будет e? Зависит от других факторов и т. д., Также я упомянул, что второй дамп не показывает длину, и что e кажется длиной или ее частью, пожалуйста, предоставьте больше информации, чтобы мы могли вам помочь.
Допустим, мы предполагаем, что префикс всегда был фиксированным значением, которое равно e
или, может быть, длине сообщения, как я могу сделать свой второй дамп для создания e
перед заголовком?
Добавьте его в заголовок сообщения, как заголовок для канала, но я на 100% уверен, что это не то, что вам нужно. Так же вы продолжаете не полностью показывать дамп для новой системы, я не вижу там длину
хм, e
будет работать, если я добавлю его в заголовок, но что, если это длина сообщения? также что вы имеете в виду полностью показать дамп? это полный дамп новой системы, он не показывает длину, потому что это BASE24Channel из Jpos, у него нет префикса длины
В том то и дело, я не думаю, что вы должны в заголовке канала, я думаю, что это часть заголовка, но вы не показываете префикс с длиной для нового дампа системы, так что ваше сравнение между системами кажется неправильным , тха e
кажется длиной, потому что длина старого дампа системы составляет 67. Если это длина, кажется, вам не хватает байта в этом дампе, потому что я сомневаюсь, что максимальная длина может быть 255.
Пожалуйста, покажите полный журнал и полные дампы, включая часть длины во втором дампе.
это уже полный дамп, но позвольте мне дать вам файл pcap ссылка на файл
Ой извините, канал Base24 не отправляет длину
да, я использовал BASE24Channel от JPOS исходный код библиотеки
Вам нужно будет переопределить длину сообщения отправки и длину сообщения получения, если это e
действительно длина сообщения, если нет, оно идет в заголовке, но если вы не знаете, где оно находится, я не могу сказать вам, как лучше всего чтобы создать его и потреблять его
Кажется, что e - это длина в BCD, но она отличается на два байта (короткие 2 байта), и, вероятно, есть предыдущий байт, равный 0, который также является частью сообщения.
Да, в этом проблема, у меня нет опыта работы с байтами, есть ли какое-нибудь руководство о том, как манипулировать сообщением?
Я мог бы добавить ответ завтра с этим.
Хорошо, спасибо за помощь @AndrésAlcarraz, я буду ждать вашего руководства
Я только что опубликовал то, что должно помочь :) непроверенный, но чтобы вы начали.
У меня нет времени проверять это, но чтобы вы поняли, вам нужно расширить BCDChannel
, чтобы прочитать и отправить длину сообщения в BCD. И добавьте код для генерации и использования дополнительного байта (0x03), например:
public class MyCustomChannel extends BCDChannel {
protected void sendMessageTrailler(ISOMsg m, int len) throws IOException {
serverOut.write(0x03); //write the extra trailer byte (0x03)
}
protected void getMessageTrailer() throws IOException {
serverIn.read(); //read the extra trailer byte (0x03).
}
}
Затем настройте XML-код канала для использования собственного класса.
Возможно, вам придется переопределить sendMessageLength
и getMessageLength
, если вам нужно добавить или вычесть 2.
Тот
e
вроде и есть длина, в новом дампе длины нет, можете показать код который пишет тот дамп?