Пытаясь отправить байт [] через TCP Socket в Java, он отправляет определенный массив в виде двух отдельных сообщений, в то время как другие массивы отправляют как одно сообщение.Более подробно, я преобразую шестнадцатеричную строку в байт [], используя следующую функцию:
public static byte[] hexStringToByteArray(String s) {
byte[] b = new byte[s.length() / 2];
for (int i = 0; i < b.length; i++) {
int index = i * 2;
int v = Integer.parseInt(s.substring(index, index + 2), 16);
b[i] = (byte) v;
}
return b;
}
, а затем отправляю ее через сокет Java TCP:
ServerSocket server = new ServerSocket(3030);
Socket socket = server.accept();
OutputStream out = socket.getOutputStream();
// sample hex string
String msg = "F0700F8000F42400001544952414E00000000000000000000000662000E00060000";
out.write(HexUtiles.hexStringToByteArray(msg));
При отладкекод, который я обнаружил, разделяет массив в байте с номером 1024. Кроме того, увеличение и уменьшение размера буфера сокета не имеет значения.
Кроме того, в сообщении нет 0A (шестнадцатеричная строка \n
)!Я предполагаю, что есть некоторое странное поведение в методе write
, который отправляет массив byte [] в виде двух сообщений!Как я могу отправить байт [] как одно сообщение?