tcp 套接字写入不起作用的问题

问题描述 投票:0回答:1

我正在尝试将使用 protobuf 创建的消息写入客户端套接字, 但我不知道为什么只有下面的代码有效。

   mClientSSLSocket.getOutputStream().write(intToByte(message.getSerializedSize()));
   message.writeTo(mClientSSLSocket.getOutputStream());
  public int getSerializedSize() {
    if (memoizedSerializedSize == -1) {
      memoizedSerializedSize = Protobuf.getInstance().schemaFor(this).getSerializedSize(this);
    }
    return memoizedSerializedSize;
  }
    public static byte[] intToByte(int value) {
        return new byte[] {
            (byte) (value >> 24),
            (byte) (value >> 16),
            (byte) (value >> 8),
            (byte) value };
    }

但是:

mClientSSLSocket.getOutputStream().write(message.getSerializedSize()); <--- NOT WORK
mClientSSLSocket.getOutputStream().write(message.toByteArray()); <----- NOT WORK

我更不明白的是上面的代码 仅适用于 Android <-> Android

  • 并且不适用于 Android <-> IOS。

好吧,我怀疑它在 Android <-> IOS 上不起作用的原因是因为行分隔符...... 如何在字符串类型以外的对象类型中使用行分隔符?

谁能解释一下上面的内容吗?

mClientSSLSocket.getOutputStream().write(message.getSerializedSize()); <--- NOT WORK
mClientSSLSocket.getOutputStream().write(message.toByteArray()); <----- NOT WORK
java protocol-buffers outputstream
1个回答
0
投票

正如 @user207421 所指出的,

OutputStream.write(int)
仅写入单个字节

要写入的字节是参数b的低八位。 b 的高 24 位被忽略。

您总是想写入 4 个字节,因此这不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.