gprs服务器的问题

精锐掷矛手 2009-12-11 08:27:10
gprs终端设备每隔3分钟就给我发一次登录包,我用登录时间和电话号码判断给服务器发送登录包的gprs是否已经在线,如何登录时间和电话号码相同,就说明这个gprs已经登录了;如果登录时间不一样,电话号码一样,说明是已经重新连接的gprs。服务器会断开先前的连接。gprs登录时间是在gprs连接服务器的时候确定的。代码如下:
/*
*************************************
*功能:查找终端链表,剔除已登录的终端
*参数:str:终端标识符(电话号码)
*返回值:void
*************************************
*/
int IOCP::CheckLoginClient(ClientContext * pClient,const CString &str)
{
EnterCriticalSection(&g_csClientList);
int re_value=0;
std::vector <ClientContext *>::iterator IterClientContext;
for (IterClientContext = g_ClientContext.begin(); IterClientContext != g_ClientContext.end(); IterClientContext++)
{
ClientContext * Client=*IterClientContext;
if ((Client->LoginTime==pClient->LoginTime) && (Client->GetPhone()==str))
{
re_value=1;
break;
}else
if ((Client->GetPhone()==str) && (Client->LoginTime!=pClient->LoginTime))
{
g_ClientContext.erase(IterClientContext);
delete *IterClientContext;
*IterClientContext=NULL;
re_value=2;
break;
}
}
LeaveCriticalSection(&g_csClientList);
return re_value;

}
re_value=1时说明是已经连接的gprs

可运行一段时间后,程序总弹出错误。望高手指点,不胜感激!
...全文
145 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
精锐掷矛手 2009-12-12
  • 打赏
  • 举报
回复
谢谢
togoblime 2009-12-12
  • 打赏
  • 举报
回复
g_ClientContext.erase(IterClientContext);
delete *IterClientContext;
*IterClientContext=NULL;
节点Iterator已经erase了,不能再使用,应该这样写
g_ClientContext.erase(IterClientContext);
delete Client;
Client=NULL;
精锐掷矛手 2009-12-12
  • 打赏
  • 举报
回复
再顶
精锐掷矛手 2009-12-11
  • 打赏
  • 举报
回复
顶一下吧

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧