在GPRS模块中使用UDP协议,如果GPRS在线,该UDP数据通道是连接着的,如果某一模块不在线,在UDP服务器端发数据时收到的是多个0X00;但如果我用按键相应函数
void CTestgprsdllView::OnNumonline()
{
// TODO: Add your command handler code here
int m=0;
m=get_online_user_amount();
CString str;
str.Format("number=%d",m);
AfxMessageBox(str);
}
get_online_user_amount();是自己动态库里面的函数
int get_online_user_amount()
{
int num=connectnum;isdisconnect=true;
// ZeroMemory(recdata,1024);
for(int i=0;i<num;i++)
{
do_send_userdata("ceshi",my_rec[i]);
Sleep(10);
}
Sleep(2000);
return gprs_online_num ;
}
如果对方收到“ceshi"马上返回数据”“ok”。在我得接收线程中gprs_online_num 是自定义动态库中的全局变量
if(strcmp(recdata,"ok")==0)
{gprs_online_num++;
char str[1024];
sprintf(str,"%d zaixian| ",gprs_online_num );
MessageBox(0,str,MB_OK,NULL);
return 0;}
当我UDP客户端连接此服务端时,我按下void CTestgprsdllView::OnNumonline()
进行测试在线UDP客户端数目,结果返回
num=0; 1 zaixian;
再次按下该键:num=1,说明我得程序接收线程已经收到“ok”,但接收线程中改变的gprs_online_num 值无法传给get_online_user_amount(),即使延时再长,接收线程的数据无法给当前主线程;高手给点提示吧!
void CTestgprsdllView::OnNumonline()
{
// TODO: Add your command handler code here
int m=0;
m=get_online_user_amount();
CString str;
str.Format("number=%d",m);
AfxMessageBox(str);
}
get_online_user_amount();是自己动态库里面的函数
int get_online_user_amount()
{
int num=connectnum;isdisconnect=true;
// ZeroMemory(recdata,1024);
for(int i=0;i<num;i++)
{
do_send_userdata("ceshi",my_rec[i]);
Sleep(10);
}
Sleep(2000);
return gprs_online_num ;
}
如果对方收到“ceshi"马上返回数据”“ok”。在我得接收线程中gprs_online_num 是自定义动态库中的全局变量
if(strcmp(recdata,"ok")==0)
{gprs_online_num++;
char str[1024];
sprintf(str,"%d zaixian| ",gprs_online_num );
MessageBox(0,str,MB_OK,NULL);
return 0;}
当我UDP客户端连接此服务端时,我按下void CTestgprsdllView::OnNumonline()
进行测试在线UDP客户端数目,结果返回
num=0; 1 zaixian;
再次按下该键:num=1,说明我得程序接收线程已经收到“ok”,但接收线程中改变的gprs_online_num 值无法传给get_online_user_amount(),即使延时再长,接收线程的数据无法给当前主线程;高手给点提示吧!
int startrec(LPVOID point)
{
point=m_point;
hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE )recthread,(LPVOID)point,0,NULL);
return 0;
}UINT recthread(LPVOID param)
{sockaddr_in from;
int fromlength=sizeof(SOCKADDR);
//ZeroMemory( recdata,1024);
ZeroMemory( recdata,1024);
reclen=recvfrom(s,recdata,1024,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength);
Sleep(1);
if(strcmp(recdata,"isonline")==0)
{gprs_online_num++;
char str[1024];
sprintf(str,"%d zaixian| ",gprs_online_num );
MessageBox(0,str,MB_OK,NULL);return 0;}//获得当前在线数目
}上面所有的是在动态库里面编写的函数,请给分析分析吧,谢谢啦
{gprs_online_num++;
写错了错误,为if(strcmp(recdata,"ok")==0)