我试图通过网络连接发送iso8583数据,目前当我发送数据时,它在TCP查看器中显示为一个长字符串
但它看起来应该是这样的
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();
数据是否必须以特定方式发送? 任何帮助非常感谢。
答案 0 :(得分:1)
事实证明,问题在于我必须使用整数的字节数组来编写输出,这反过来在TCP查看器中显示为十六进制数据,我面临的下一个问题是字节数组中的任何整数都超过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;
}
希望这有助于某人