Как кодировать данные для ISO 8583 для передачи сокета C # - PullRequest
3 голосов
/ 07 декабря 2010

Я не совсем понимаю, как отправлять данные через c # socket.send (byte []), я имею в виду, что они говорят, что мне нужно отправить 0800 (запрос управления сетью) для проверки эха, как конвертировать.Пожалуйста, я программировал некоторое время, но я не понимаю инструкции.

Спасибо

Ответы [ 4 ]

5 голосов
/ 14 февраля 2011

Прежде всего вам необходимо понять формат сообщения ISO8583 .Для тестовых сообщений эха в версии 87 ваш MTID должен быть 0800, а в поле 70, Код информации управления сетью, должно быть установлено значение 301, указывающее эхо-тест.

Создание сообщения ISO довольно сложно.( бесстыдный плагин выходит ) Я выпустил OpenIso8583.Net , синтаксический анализатор / компоновщик сообщений для .Net, который может быть расширен до конкретной разновидности ISO, которую вы используете

1 голос
/ 07 декабря 2010

Вы должны сначала понять спецификацию, над которой вы работаете; Я ожидаю, что у вас есть что-то более конкретное, чем просто спецификация сообщения ISO8583, что-то конкретное в отношении необходимых полей и содержимого. Важно то, как вы строите и деблокируете поля ISO8583 от и до сообщения, основываясь на растровом изображении, которое указывает, какие поля присутствуют.

Когда в прошлом я создавал тестовые клиенты ISO8583 на C #, я сначала собрал набор классов, которые могли бы создавать и разблокировать растровое изображение сообщения. Как только вы это сделаете, вам понадобится некоторый код для сборки и деблокирования ваших сообщений. Они будут устанавливать (или проверять) биты в битовой карте, а затем извлекать или вставлять ожидаемые поля в байтовый буфер.

Как только вы это сделаете, фактическая отправка и получение сообщений байтового буфера тривиальны.

0 голосов
/ 26 февраля 2013
            //***************additional encoders***************
            UnicodeEncoding encoderUnicode = new UnicodeEncoding();
            UTF32Encoding encoder32 = new UTF32Encoding();
            UTF7Encoding encoder7 = new UTF7Encoding();
            UTF8Encoding encoder8 = new UTF8Encoding();
            //*************end of additionals*************

            ASCIIEncoding encoder = new ASCIIEncoding();

о парсере, сделайте гугл на iso 8583, желательно 2003

0 голосов
/ 07 декабря 2010

Глядя на спецификацию, здесь невозможно дать полный ответ, но для начала вам нужно создать различные сообщения и отправить их по конвейеру.Поскольку классу Socket требуется массив байтов, а не строка, вы можете использовать один из классов Encoding для получения необработанных байтов строки.Если я правильно читаю информацию из Википедии :

byte[] echo = System.Text.Encoding.ASCII.GetBytes("0100");
socket.Send(echo);

Отказ от ответственности: мне никогда не приходилось применять ISO 8583, и ссылка, на которую я смотрел, была неясной, если коды былиНа самом деле простые символы ASCII (хотя я держу пари, что они есть).Надеюсь, кто-то, более знакомый со стандартом, уточнит или подтвердит это предположение.

...