我已经制作了一些发送二进制值的套接字程序:整数和双精度值,但为了做到这一点,您必须确定两台机器(服务器和客户端)都是二进制兼容的(字节顺序)。确保在两台机器中,双精度 (sizeof(double)) 的大小相同,均为 8 个字节。英特尔机器和平板电脑 Android 就是这种情况,它们在 C#、C++、Java 和 Delphi 中是相同的。我还在平板电脑(Android 和 Java)之间进行二进制传输到 Windows XP 和 7 中用 C# 编写的程序,它可以工作。
请记住,它不会是可移植的,并且应该在移植到其他平台之前进行测试。
我会给你一些例子:
C++
// Sender
Send(socket, &MyDouble, sizeof(MyDouble), 0);
// Reader
Recv(socket, &MyDouble, sizefof(MyDouble), 0);
爪哇:
// Sender
ByteBuffer buff = ByteBuffer.allocateDirect(8);
buff.order(ByteOrder.LITTLE_ENDIAN); // To Intel machines
buff.putDouble(MyDouble);
Socket.getOutputStream().write(buff.array(), 0, 8);
// Reader
byte[] data new byte[8];
Socket.getInputStream().read (data, 0, 8);
ByteBuffer buff = ByteBuffer.wrap(data);
buff.order(ByteOrder.LITTLE_ENDIAN); // From Intel machines
MyDouble = buff.getDouble();