0
我用C寫了一個服務器字節的數據++和代碼看起來像這樣無法讀取的InputStream
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);
}
它讀錯了。對於幻數,我得到的數字不合理,並且數據長度始終爲0。
我該如何解決這個問題?在此先感謝..
在這裏使用std :: vector而不是原始數組可能會更好。對於要連接的大小,也使用枚舉將有助於可讀性,即:enum {PACKET_HEADER_SIZE = 4}。而不是memcpy,使用std :: copy或類似的,等等。 –
fileoffset