c#socket.send(byte [])を介してデータを送信する方法が正確にわかりません。つまり、エコーテストのために0800(ネットワーク管理要求)を送信する必要があると言われています。変換方法です。しばらくプログラミングをしてきましたが、手順がわかりません。
ありがとう
まず、ISO8583 メッセージ形式を理解する必要があります。エコー テスト メッセージの場合、リビジョン 87 では、MTID は 0800 で、ネットワーク管理情報コードであるフィールド 70 は、エコー テストを示す 301 に設定する必要があります。
ISO メッセージを作成するのは非常に難しい作業です。(恥知らずなプラグインの登場) OpenIso8583.Net をリリースしました。.Net用のメッセージ パーサー/ビルダーであり、使用している ISO の特定のフレーバーに拡張できます。
まず、取り組んでいる仕様を理解する必要があります。ISO8583 メッセージ仕様そのものよりも具体的なもの、つまり必要なフィールドとコンテンツに固有のものがあると思います。重要なことは、存在するフィールドを指定するビットマップに基づいて、メッセージとの間で ISO8583 フィールドを構築およびブロック解除する方法です。
過去に C# で ISO8583 テスト クライアントを作成したとき、最初に、メッセージ ビットマップを作成およびブロック解除できる一連のクラスをまとめました。それができたら、メッセージを作成してブロック解除するためのコードが必要です。これらは、ビットマップ内のビットを設定 (またはテスト) し、予想されるフィールドをバイト バッファーに抽出または挿入します。
これが機能すると、実際のバイト バッファ メッセージの送受信は簡単です。
//***************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();
パーサーについては、できれば 2003 の iso 8583 でググってください。
仕様を見ると、ここで完全な回答を提供することは不可能ですが、開始するには、基本的にさまざまなメッセージを作成してパイプに送信する必要があります。Socket クラスは文字列ではなくバイトの配列を必要とするため、Encoding クラスの 1 つを使用して、文字列の生のバイトを取得できます。ウィキペディアから情報を正しく読んでいる場合:
byte[] echo = System.Text.Encoding.ASCII.GetBytes("0100");
socket.Send(echo);
免責事項: 私は ISO 8583 を実装する必要はありませんでした。私が参照したリファレンスでは、コードが実際に単純な ASCII 文字であるかどうかが明確ではありませんでした (ただし、そうであると確信しています)。標準に詳しい人がその仮定を明確にするか確認してくれることを願っています。