代码之家  ›  专栏  ›  技术社区  ›  Soheil Pourbafrani

Java Socket OutputStream将一个字节[]作为两个独立的消息写入

  •  0
  • Soheil Pourbafrani  · 技术社区  · 6 年前

    在Java中,试图通过TCP套接字发送byte[],它将一个特定的数组作为两条独立的消息发送,而其他数组则作为一条消息发送。 更详细地说,我使用以下函数将十六进制字符串转换为byte[]:

    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;
        }
    

    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字节分隔数组。另外,增加和减少套接字缓冲区大小也没有区别。

    \n write 方法将字节[]数组作为两条消息发送!如何将字节[]作为一条消息发送?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Piotr Praszmo    6 年前

    TCP中没有“消息”。所有的东西都是以流的形式发送的,它的另一端如何分块还没有定义。块可以分开或连接在一起。

    DataOutputStream . 使用读取另一端的尺寸 DataInputStream

    另一种选择是使用 ObjectOutputStream ObjectInputStream