多线程下socket接收问题
socket是CSocket类继承而来的,socket是在线程里创建的,因此不能触发OnReceive函数,改用recv函数来接收数据,但是,发现用
recv函数来接收来会出现掉包现象
具体程序如下:
else if(fmuPro.strProtName=="光一")
{
unsigned char dataBefore[200];
UINT nLenth, nFrameLen;
int nLenthBefore;
memset( dataBefore, 0, 200 );
if( fmuPro.strCommMode=="0" || fmuPro.strCommMode=="1") //GPRS
{
unsigned char slendata[4000];
memset(slendata,0,4000);
if( bReadCTData || (nLenthBefore = recv(m_FmuSocket->m_hSocket, (char *)dataBefore, 200, MSG_PEEK))!=-1 )
{
Sleep(300);
nLenth = m_FmuSocket->Receive( mTreadBuf->DataBuf, 4000, MSG_PEEK );
if( nLenth==0 || nLenth == -1)
{
return 0;
}
else
((CQueueThread *)m_pParent)->DispSysLog( 2, 0, CUtilities::Hex2Ascii( (char *)mTreadBuf->DataBuf, nLenth ) );//信息栏帧数据显示
}
else
return 0;
}
else
return 0;
if( pFmuMan->fnGYIsRcvedFrame )
{
nFrameLen = pFmuMan->fnGYIsRcvedFrame( mTreadBuf, nLenth );
if( nFrameLen==0 )
m_FmuSocket->Receive( mTreadBuf->DataBuf, nLenth );
else
m_FmuSocket->Receive( mTreadBuf->DataBuf, nLenth );
return nFrameLen;
}
else
return 0;
}