UDP获取字节信息

相关标签: # git# 数据# 信息
void CALLBACK XIONGAAPP::XIONGAAGPSRecvCallback(char *pRecvBuf, int nRecvLen, void *pUserData)
{
LOG4CPLUS_INFO(LOGGERTAG, "开始接收回调信息");
char szTVer2Fram[512] = { 0 };
char szVer2Body[512] = { 0 };
//截取需要的数据部分
memcpy(szTVer2Fram, pRecvBuf + 9, sizeof(szTVer2Fram));
//根据发送的结构体定义一个相同的结构体接收数据
TVer2Fram* szbuff = (TVer2Fram*)szTVer2Fram;
TVer2DataBody* szbuff1 = (TVer2DataBody*)szVer2Body;
memcpy(szVer2Body, szTVer2Fram + 21, sizeof(szVer2Body));
std::string strGpsID;
double dx ;
double dy ;
unsigned short speed ;
unsigned short dir ;
unsigned short height ;
unsigned short precision ;
unsigned short year ;
BYTE month ;
BYTE day ;
BYTE hour ;
BYTE minute ;
BYTE second ;
strGpsID = szbuff->id; //GPSID
dx = szbuff1->dx; // 纬度
dy = szbuff1->dy; //经度
speed = szbuff1->speed; //速度
dir = szbuff1->dir; //方向
height = szbuff1->height; //高度
precision = szbuff1->precision; //精度
year = szbuff1->date.year; //时间 年
month = szbuff1->date.month; //月
day = szbuff1->date.day; //日
hour = szbuff1->date.hour; //时
minute = szbuff1->date.minute; //分
second = szbuff1->date.second; //秒
unsigned short sYear = ntohs(year);
unsigned short sSpeed = ntohs(speed);
unsigned short sDir = ntohs(dir);
unsigned short sHeight = ntohs(height);
unsigned short sPrecision = ntohs(precision);
int nmonth = (int)month;
int nday=(int)day;
int nhour = (int)hour;
int nminute = (int)minute;
int nsecond = (int)second;
std::string strYear = boost::lexical_cast<std::string>(sYear);
std::string strMonth = boost::lexical_cast<std::string>(nmonth);
std::string strDay = boost::lexical_cast<std::string>(nday);
std::string strHour = boost::lexical_cast<std::string>(nhour);
std::string strMinute = boost::lexical_cast<std::string>(nminute);
std::string strSecond = boost::lexical_cast<std::string>(nsecond);
stringstream sstream;
sstream << strYear << "-" << setw(2) << setfill('0') << strMonth << "-" << setw(2) << setfill('0') << strDay << " " << setw(2) << setfill('0') << strHour << ":" << setw(2) << setfill('0') << strMinute << ":" << setw(2) << setfill('0') << strSecond;
std::string strDateTime = sstream.str();
Json::Value root;
root["CmdType"] = QPID_GPS_INFO;
root["Type"] = eGpsTypeHikEnforcement;
root["DeviceIdentify"] = strGpsID;
root["Longitude"] = dx;
root["Latitude"] = dy;
root["Speed"] = sSpeed;
root["Dir"] = sDir;
root["Height"] = sHeight;
root["Precision"] =sPrecision;
root["DateTime"] = strDateTime;
std::string strQpidGPSTrackMsg = root.toStyledString();
LOG4CPLUS_INFO(LOGGERTAG, strQpidGPSTrackMsg);
CMessageCenter::GetInstance().AddQpidMessage(strQpidGPSTrackMsg);
}
CUDPServer *g_pXAUDPServer = NULL;
boost::asio::io_service io_service_;
void XIONGAAPP::XIONGAHKGPSMessageFun()
{
int nPort = 0;
CConfigCenter::GetInstance().GetXIONGAHKUpdPort(nPort);
if (nPort > 0)
{
if (g_pXAUDPServer == NULL)
{
g_pXAUDPServer = new CUDPServer(io_service_, nPort);
g_pXAUDPServer->SetRecvCallback(XIONGAAGPSRecvCallback, 0);
io_service_.run();
}
else
{
if (io_service_.stopped())
{
g_pXAUDPServer->SetRecvCallback(XIONGAAGPSRecvCallback, 0);
io_service_.reset();
io_service_.run();
}
}
}
}
void XIONGAAPP::StartXIONGAMonitorGPS()
{
boost::thread XIONGAhkGPSMessageThread(&XIONGAAPP::XIONGAHKGPSMessageFun);
XIONGAhkGPSMessageThread.detach();
}
void XIONGAAPP::StopXIONGAMonitorGPS()
{
io_service_.stop();
g_pXAUDPServer->SetRecvCallback(NULL, NULL);
if (g_pXAUDPServer != NULL)
delete g_pXAUDPServer;
}
使用boost库链接udp
文章来源: https://blog.51cto.com/u_15701808/6000023
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报