send()函数返回更多需要c ++的字节 [英] send() function returns more bytes that it was required c++

查看:185
本文介绍了send()函数返回更多需要c ++的字节的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个套接字程序,在我的服务器与设备连接后,我试图向他发送一条消息。但send()函数返回的字节数大于存储在我的数组上的字节数。



以下是我的代码:

  StartSendingMessages()
{
int retorno;
CString TextRetorno;

HEX_bufferMessage = new CHAR [7]; //有七个字节

//指定状态
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 !!);
}
}

任何人都知道为什么会发生这种情况?

解决方案

您不是指 sizeof(HEX_bufferMessage) HEX_bufferMessage 的类型是[大概] char * ,大小为 char *



传送 7



<$>

p $ p> const int BUF_SIZE = 7;
char HEX_bufferMessage [BUF_SIZE];

// ...

retorno = send(sckSloMo,& HEX_bufferMessage [0],BUF_SIZE,0);


I am doing a socket program and, after my server is connected with the device, I am trying to send a message to him. But the send() function returns a number of bytes greater than the number of bytes that is stored on my array. And the message is not being sent.

Here is my code:

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 !!");
    }
}

Anyone knows why is this happening??

解决方案

You did not mean sizeof(HEX_bufferMessage). The type of HEX_bufferMessage is [presumably] char*, and the size of a char* is 8 bytes on your [64-bit] system.

Pass the number 7 instead, preferably using a constant, and get rid of that dynamic allocation if the value 7 really is fixed.

const int BUF_SIZE = 7;
char HEX_bufferMessage[BUF_SIZE];

// ...

retorno = send(sckSloMo, &HEX_bufferMessage[0], BUF_SIZE, 0); 

这篇关于send()函数返回更多需要c ++的字节的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆