一段socket接收判断函数。保证能够接收完成

void __fastcall TServerConnect::TCPClientPort_ReadBuffer(TObject *Sender, TCustomWinSocket *Socket)
{


     int count = Socket->ReceiveLength();
    // Socket->
     Socket->ReceiveBuf(&RecBuffer[Recount],count);
     Recount+=count;
     while (Recount>0)
     {
          if (Recount>6)
          {
             int Requsetlen=RecBuffer[4]+RecBuffer[5]*256+6;;
             if (RecBuffer[0]==0xCB&&RecBuffer[1]==0x09&&RecBuffer[2]==0xCB&&RecBuffer[3]==0x09&&Requsetlen<=Recount)
             {


                         memset(ProBuffer,0,sizeof(ProBuffer));//接收数组

                         memcpy(&ProBuffer[0],RecBuffer,Requsetlen);
                         memcpy(RecBuffer,&RecBuffer[Requsetlen],sizeof(RecBuffer)-Requsetlen);
                         Recount=Recount-Requsetlen;
                         if (ProBuffer[7]*256+ProBuffer[6]==2)//电参数
                         {

                                int index=ProBuffer[11]*256*256*256+ProBuffer[10]*256*256+ProBuffer[9]*256+ProBuffer[8];  //判断 节点ID
                                for (int i=0;i<DeviceDataList->Count;i++)
                                {
                                     TDeviceData*tempdata=(TDeviceData*)DeviceDataList->Items[i];
                                     if (index==tempdata->DeviceIndex)
                                     {
                                           memcpy(tempdata,&ProBuffer[18],sizeof(TDeviceData));
                                           tempdata->ByteData[4]=0x80;
                                           tempdata->DoubleData[8]=0x80;
                                           tempdata->ByteData[3]=96;//0x80;
                                           break ;
                                     }

                                }

                         }
                         if (ProBuffer[7]*256+ProBuffer[6]==5)//事件
                         {
                                //S_SoeInfo
                                //int index=ProBuffer[11]*256*256*256+ProBuffer[10]*256*256+ProBuffer[9]*256+ProBuffer[8];//判断 节点ID

                                 SOE_CommINFO *tempdata=new SOE_CommINFO();
                                 memcpy(tempdata,&ProBuffer[18],sizeof(SOE_CommINFO));
                                 NewSoeDataList->Add(tempdata);
                                 break ;




                         }











                     
             }
          }
          else
          {

              return;
          }
     }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值