我正在做套接字程序,在我的服务器与设备连接后,我正在尝试向他发送消息。但是send()函数返回的字节数大于存储在我的数组中的字节数。并且没有发送消息。
这是我的代码:
StartSendingMessages()
{
int retorno;
CString TextRetorno;
HEX_bufferMessage = new CHAR[7]; // there are seven bytes
// specifies the state
HEX_bufferMessage[0] = 0xF0;
HEX_bufferMessage[1] = 0x15;
HEX_bufferMessage[2] = 0x31;
HEX_bufferMessage[3] = 0x04;
HEX_bufferMessage[4] = 0x02; // green
HEX_bufferMessage[5] = 0x0E; // C1
HEX_bufferMessage[6] = 0xF7;
retorno = send(sckSloMo, HEX_bufferMessage, sizeof(HEX_bufferMessage), 0);
TextRetorno.Format("%d", retorno); // retorno = 8
AfxMessageBox("Bytes enviados: " + TextRetorno);
if (retorno == SOCKET_ERROR)
{
AfxMessageBox("Error Send!!");
return;
}
else if(retorno != 0)
{
AfxMessageBox("Send() OK !!");
}
}
任何人都知道为什么会这样?
答案 0 :(得分:4)
你不是指sizeof(HEX_bufferMessage)
。 HEX_bufferMessage
的类型[推测]为char*
,[{1}}的大小为[64位]系统上的8个字节。
改为使用数字char*
,最好使用常量,如果值7
确实已修复,则删除该动态分配。
7
答案 1 :(得分:2)
HEX_bufferMessage的类型是指向CHAR的指针。您在平台中使用的sizeof(HEX_bufferMessage)等于8。
答案 2 :(得分:0)
假设你已经
TYPE* myPointer;
然后sizeof(myPointer)
将给出指针的大小(即32位系统上的4个字节,64位系统上的8个字节),不数组的大小。< / p>
你想做
const int bufferSize = 7;
HEX_bufferMessage = new CHAR[bufferSize];
...
retorno = send(sckSloMo, HEX_bufferMessage, sizeof(CHAR) * bufferSize, 0);
答案 3 :(得分:0)
您似乎认为sizeof(HEX_buffer_message)
会产生HEX_buffer_message
中的元素数量。它没有。它产生HEX_buffer_message
类型的大小,它似乎是一个64位指针,产生8
而不是7
。无法从返回的指针确定从new T[n]
分配的数组的大小。您需要使用以某种方式传递的n
。