我用c++写了一个服务器,代码是这样的
char *sendBuffer = new char[4+4+1+8+48];
m_magicNumberBuffer[0] = 0xA9;
m_magicNumberBuffer[1] = 0xA9;
m_magicNumberBuffer[3] = 0xA9;
m_magicNumberBuffer[4] = 0xA9;
int m_dataLength = 4+4+1+8+48;
unsigned char m_type = 1;
long long m_deviceId = 12123122123;
char m_msg = new char[48];
m_msg = "NO ERROR";
/*
* Magic number;
*/
memcpy(sendBuffer, m_magicNumberBuffer + offset, 4);
offset += 4;
/*
* Data length
*/
memcpy(sendBuffer, &m_dataLength + offset, 4);
offset += 4;
/*
* Packet type
*/
memcpy(sendBuffer, &m_type + offset, 1);
offset += 1;
/*
* Device ID
*/
memcpy(sendBuffer, &m_deviceId + offset, 8);
offset += 8;
memcpy(sendBuffer, m_msg + offset, 48);
offset += 48;
我正在写 sendBuffer
write(client->getFd(), sendBuffer, MAX_LENGTH);
客户端是用Java写的
我正在做这样的事情
InputStream in = mSocket.getInputStream();
DataInputStream dis = new DataInputStream(in);
int magicNumber = dis.readInt();
int length = dis.readInt();
byte[] data = new byte[length];
if(length > 0){
dis.readFully(data);
}
它读取了一些错误。我得到的魔数(Magic Number)不合理,数据长度始终为 0。
我该如何解决这个问题?提前致谢..
最佳答案
非常简单,真的:您想将您的offset
添加到目标sendBuffer
,而不是您的源。例如。而不是
memcpy(sendBuffer, &m_deviceId + offset, 8);
你想要
memcpy(sendBuffer + offset, &m_deviceId, 8);
实际上,您将各种随机数据存储到 sendBuffer
的前几个字节,而其余部分则没有任何内容。
关于java - 无法从输入流读取字节数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566920/