0

ネットワーク接続を介して iso8583 データを送信しようとしています。現在、データを送信すると、TCP ビューアーに 1 つの長い文字列として表示されます。

しかし、それはこのように見えるはずです

0000(0000)  30 38 30 30 82 38 00 00  00 00 00 00 04 00 00 00   0800.8..........
0016(0010)  00 00 00 00 30 38 32 34  31 30 35 31 30 30 31 33   ....082410510013
0032(0020)  35 31 30 30 31 33 35 31  30 30 30 38 32 34 33 30   5100135100082430
0048(0030)  31                                                 1

データを送信するための私のコード

Socket plug = new Socket(Config.getServerIP(), Config.getServerPort());
DataInputStream In= new DataInputStream(plug.getInputStream());
PrintWriter Out = new PrintWriter(plug.getOutputStream());

String Indata, Outdata;
Outdata =" ";
Indata = "NOTHING";

while (!Outdata.equals("Bye"))
{
  Outdata=message;
  Out.write(Outdata);
  Out.flush();

  if (!Outdata.equals("Bye"))
  {
    Indata=In.readLine();
    System.out.println(Indata);
  }
}
In.close();
Out.close();

データは特定の方法で送信する必要がありますか? どんな助けでも大歓迎です。

4

1 に答える 1

1

問題は、整数のバイト配列を使用して出力を書き込まなければならなかったことであることがわかりました。これは、TCP ビューアーに 16 進データとして表示されます。次に直面した問題は、バイト配列内の 128 を超える整数がエラーを引き起こしていることでした。次の方法を使用しなければならなかったバイパスへのオーバーフロー

Socket server = new Socket(Config.getServerIP(), Config.getServerPort());
bytes = packData(bytes);
    server.getOutputStream().write(bytes, 0, bytes.length);

次に packData メソッド

static byte[] packData(byte[] data) {
    int len = data.length;
    byte buf[] = new byte[len + 2];
    buf[0] = (byte) (len >> 8 & 255);
    buf[1] = (byte) (len & 255);
    System.arraycopy(data, 0, buf, 2, len);
    return buf;
}

これが誰かを助けることを願っています

于 2013-08-28T09:42:33.510 に答える