class Data {
public:
Material *kind;
double *thickness;
void DataInit(int);
void DataEnd();
};class RWDATA
{
public:
Data m_MData;
int Floor;
int flag;
BOOL m_bOnline;
    double value[FREQNUM];
char m_strAction[255];
}m_Dat;void Data::DataInit(int floor)
{
kind=new Material[floor*FREQNUM];
thickness=new double[floor];
}
m_Dat.m_MData.DataInit(2);sockClient.Send(&m_Dat,sizeof(RWDATA));//m_Dat.m_MData的值无法正确收到,怎么解决,请给出具体代码,谢谢

解决方案 »

  1.   

    sizeof(RWDATA)无法得到正确的值。因为你的类中有指针。如果用sizeof获取指针的长度,只会返回4,而不是指针指向的内容的长度。
      

  2.   

    应该在类中增加获得长度的函数。而且你的类中最好有个整数记录你这些指针的长度。比如double*有多长,我看你自己都不知道。
      

  3.   

    www.vckbase.com There is the source code that you need.
      

  4.   

    似的我不知道,还请大侠指教。
    我刚才定义了一个函数:
    int RWDATA::GetLength(int floor)
    {
    int m;
    m=sizeof(double)*5;
    m*=floor*FREQNUM;
    m+=sizeof(double)*floor;
    m+=sizeof(int)*2;
    m+=sizeof(BOOL);
    m+=sizeof(double)*FREQNUM;
    m+=sizeof(char)*255;
    return m;
    }
    这样好象也不行啊,能不能给出具体的代码??
      

  5.   

    使用类结构传递数据,你可以对于每一个类进行串行化,将整个数据结构变成一个流,然后加上这个流的长度。在进行传递,这样可以解决类中包含变长结构的问题,同时在传递这个流的时候,应该加上校验码,通常可以加在这个流的最后,这样在另一端接受到这个数据流之后,可以利用这个校验码来检测是否接受正确。
    串行化,可以自己写。如果你的数据类直接派生自CObject,则非常简单。只是数据会稍微大一些。如果变换出来的数据流很大,你可以在发送之前进行数据的压缩。