switch (receive)

case 'a':   
                  for(j=0;j<=47;j++)
{
     //datasendt[2*j]=0x55;//************
      //datasendt[2*j+1]=' ';//*************
 datasend[j]=m_cl.Amp_TData[0x0D][j];                      }
for(n=0;n<=47;n++)   ///用空格隔开
{
 datasendt[2*n]=datasend[n];
                   datasendt[2*n+1]=' ';

}
ret=send(s,datasendt,sizeof(datasendt),0); 发给客户端
          if(ret==0||ret==SOCKET_ERROR)
{
          TRACE(_T("send data error:%d\n"),WSAGetLastError());
AfxMessageBox(_T("datasendt error!"));
                    //closesocket(m_hSocket);
    //return;
            continue;
}


break;
    }奇怪的地方就是如果我发给客户端的是上面注释有//***********的那两句中的数租,就是法一个48个字节的数组,里面全是写定的55,对方就能够准确的收到,但是如果换作m_cl.Amp_TData[0x0D][j];    这个数组,对方怎么都收不对,48个字节总是缺几个,一般缺最后三个,还有就是对方是VB的程序,中间进行了UNICODE码的转换,而且收的同时去掉了空格

解决方案 »

  1.   

    Amp_TData[0x0D][j];    这个数组是从串口读出的一个数组,它是完整的一帧48个
      

  2.   

    datasend[j]=m_cl.Amp_TData[0x0D][j];    你要保证后面这个数组有数据才行
      

  3.   

    datasend[j]=m_cl.Amp_TData[0x0D][j];
    ====================================================================我不知道你这两个是什么类型的,但请看看是否是类型问题,造成数据被截断
      

  4.   

    比如你的datasend[j]是char型的,而m_cl.Amp_TData[0x0D][j]==0x2300那么数据就被截断了
      

  5.   

    大虾果然厉害,确实是类型的问题,昨天的问题是这样解决的
             char buff[1];
    char receive;
    char datasend[1440];    //发给上位机的功放数据帧
    char datasendt[2880];
    int n;
    BYTE       Amp_TData[17][48];
    BYTE j;
    int i;//////////////////////////////数据类型如上/////////////////////////////
                               char s1[2];
    for(j=0;j<=47;j++)
    {
    //datasendt[2*j]=0x55;//************
    //datasendt[2*j+1]=' ';//*************
    sprintf(s1,"%02X", m_cl.Amp_TData[0x00][j]);  
    datasend[2*j]=s1[0];              datasend[2*j+1]=s1[1];             
    }不过今天还有个类似问题,就是
    CString str;
    SYSTEMTIME *curDateTime=new SYSTEMTIME;
    GetLocalTime(curDateTime);
    DWORD year = curDateTime->wYear;
    DWORD month = curDateTime->wMonth;
    DWORD day = curDateTime->wDay;
    DWORD hour = curDateTime->wHour;
    DWORD minute = curDateTime->wMinute;
    DWORD second = curDateTime->wSecond;
    delete curDateTime;                DWORD d=year;
    char str1[4];
    memcpy(str1,(char*)&d,4);
    DWORD a=0;
    memcpy((char*)&a,str1,4); datasend[0]=str1[0];
    datasend[1]=str1[1];
    datasend[2]=char(month);
    datasend[3]=char(day);
    datasend[4]=char(hour);
    datasend[5]=char(minute);
    datasend[6]=char(second);
    datasend[7]=timeobuff[0];
    datasend[8]=timeobuff[1];
    datasend[9]=timeobuff[2];
    datasend[10]=timeobuff[3];
    datasend[11]=timeobuff[4];
    datasend[12]=timeobuff[5];
                      for(i=0;i<=12;i++)   //用空格隔开
    {
    datasendt[2*i]=datasend[i];
    datasendt[2*i+1]=' ';
    }
            ret=send(s,datasendt,sizeof(datasendt),0);
    这样对方收到也不对,为什么呀,我都已经把他们写成char型的了请大家再支个招,多谢!好着急啊。!
      

  6.   

    你这样都不出问题的话,我才佩服了
    DWORD d;
    char str1[4];
    memcpy(str1,(char*)&d,4);
    -------------------------------------------------------------
    我知道你想把整型变成char *型,但这样做..........................DWORD ==ULONG;
    所以你就用 itoa()来转换成char *
      

  7.   

    当然,你不熟悉itoa的话,也可以用sprintf(buf,"%d",d);这样也可以