数据包格式及接收后拆包的分析,谢谢啦

解决方案 »

  1.   

    //解析出租实时信息
    private bool DecodeCarInfo(byte[] m_ReceiveBuffer)
    {
    long  longitude = 0,latitude = 0;
    double lo = 0.0,la = 0.0;
    byte status = 0;
    long mdtid = 0;
    int hour = 0,minute = 0,second = 0,speed = 0,nyear = 0,nmonth = 0,ndate = 0;
    byte btByte,btDirection = 0;;

    try
    {
    int nArrayPos = 1;
    btByte = m_ReceiveBuffer[  nArrayPos++];
    mdtid = mdtid | btByte;
    mdtid = mdtid << 8;
    btByte = m_ReceiveBuffer[  nArrayPos++];
    mdtid = mdtid | btByte;
    mdtid = mdtid << 8;
    btByte = m_ReceiveBuffer[  nArrayPos++];
    mdtid = mdtid | btByte;
    mdtid = mdtid << 8;
    btByte = m_ReceiveBuffer[  nArrayPos++];
    mdtid = mdtid | btByte; //status
    btByte = m_ReceiveBuffer[  nArrayPos++];
    status =Convert.ToByte(status | btByte);
    //longitude
    for(int i = 0;i< 4;i++)
    {
    btByte = m_ReceiveBuffer[  nArrayPos++  ];
    longitude = longitude | btByte;

    if(i < 3)
    longitude = longitude << 8;
    }
    lo = ((double)longitude / 10000000) ;
    //latitude
    for(int i = 0;i< 4;i++)
    {
    btByte = m_ReceiveBuffer[  nArrayPos++ ];
    latitude = latitude | btByte;
    if(i < 3)
    latitude = latitude << 8;
    }
    la = ((double)latitude / 10000000) ;
    //year
    nyear = nyear | m_ReceiveBuffer[  nArrayPos++];
    //month
    nmonth = nmonth | m_ReceiveBuffer[  nArrayPos++];
    if(nmonth > 12 ||  nmonth<1)
    nmonth = 1;
    //date
    ndate = ndate | m_ReceiveBuffer[  nArrayPos++];
    if(ndate > 31)
    ndate = 1;
    //hour
    hour = hour | m_ReceiveBuffer[  nArrayPos++];
    if(hour > 23)
    hour = 0;
    //minute
    minute = minute | m_ReceiveBuffer[  nArrayPos++];
    if(minute > 59)
    minute = 0;
    //second
    second = second | m_ReceiveBuffer[  nArrayPos++];
    if(second > 59)
    second = 0; DateTime t = new DateTime(2000 + nyear, nmonth , ndate, hour, minute, second );
    //speed modify 2003.03.10
    // speed = speed | m_strBuffer[  18];
    btByte = m_ReceiveBuffer[  nArrayPos++];
    speed = speed | btByte;
    speed = speed << 8;
    btByte = m_ReceiveBuffer[  nArrayPos++];
    speed = speed | btByte; btDirection = m_ReceiveBuffer[  nArrayPos++]; tagCARREALTIMEINFO ci= new tagCARREALTIMEINFO();
    ci.nMdtid = mdtid.ToString();
    ci.dbLongitude = lo;
    ci.dbLatitude = la;
    ci.timeReportTime =t;
    ci.nStatus = status;
    ci.nSpeed =(short)(speed);
    ci.btDirection = btDirection;
    ci.btTradeID = ClsGlobalSocket.TRADE_TAXI;
    #if DEBUG

    Console.WriteLine("{0}:MDTID={1}\\坐标({2},{3})\\时间{4}\\当前时间{5}\\剩余[{6}\\{7}]",
    m_ChinaDesc,ci.nMdtid,ci.dbLongitude,ci.dbLatitude,ci.timeReportTime,DateTime.Now,
    m_CarMsgListA.Count,m_CarMsgListB.Count);
    #endif
    m_MsgAction.AddCarMsg(ci);
    return true;
    }
    catch(Exception  ex)
    {
    #if DEBUG
    Console.WriteLine("{0}时错误{1} ",m_ChinaDesc, ex.ToString());
    #endif
    return false;
    }

    }