send()函数返回所需的更多字节c ++

时间:2013-11-04 14:26:30

标签: c++ sockets char buffer

我正在做套接字程序,在我的服务器与设备连接后,我正在尝试向他发送消息。但是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 !!");
    }
}

任何人都知道为什么会这样?

4 个答案:

答案 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