多线程下socket接收问题

jamesjinyongming 2006-12-06 01:51:03
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;

}
...全文
328 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProgrameMan 2006-12-06
  • 打赏
  • 举报
回复
socket建在线程里是不是就会有问题


**********************************
不会的
jamesjinyongming 2006-12-06
  • 打赏
  • 举报
回复
我把socket放在线程外,用OnReceive()函数触发就没有问题
jamesjinyongming 2006-12-06
  • 打赏
  • 举报
回复
socket建在线程里是不是就会有问题,我直接用堵塞方式读也有收不到的
jamesjinyongming 2006-12-06
  • 打赏
  • 举报
回复
有的时候收不到
ProgrameMan 2006-12-06
  • 打赏
  • 举报
回复
掉包是什么意思? 偶尔收不到,还是重来都收不到?
jamesjinyongming 2006-12-06
  • 打赏
  • 举报
回复
怎么还是没有人来回答啊,看来作mfc通信的人很少啊
jamesjinyongming 2006-12-06
  • 打赏
  • 举报
回复
自己给自己顶,怎么没有人回答我的问题了啊
jamesjinyongming 2006-12-06
  • 打赏
  • 举报
回复
那最好用什么方式呢?
danscort2000 2006-12-06
  • 打赏
  • 举报
回复
不管用没用到
它都必须有窗口来支持,给它发送消息
jamesjinyongming 2006-12-06
  • 打赏
  • 举报
回复
但是我本身就没有用到CSocket中的OnReceive()函数
danscort2000 2006-12-06
  • 打赏
  • 举报
回复
CSocket 必须由窗口来发送消息
本身是不支持多线程[指WORK线程]的
建议立即扔掉CSOCKET,这个类封装比较糟糕

18,356

社区成员

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

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