已有17人关注
UDP接收客户端
发表在C++图书答疑 2019-07-29 《C++从入门到精通(第3版)》第17章 网络通信
是否精华
版块置顶:

我的问题是UDP通信,使用m_sockRecv.ReceiveFrom(szRecv,50,szIP,uPort,0);接收,ReceiveFrom(为阻塞),在没有接收到数据时,其他操作会被挂起,会导致程序卡死,比如MFC窗口无法拖动等。所以我开了一个线程去执行ReceiveFrom(),但编译没问题,程序运行时报错如下:Debug Assertion Failed ...sockcore.cpp

image.png

找出原因是这句:int iRecv=pDlg->m_sockRecv.ReceiveFrom(szRecv,50,szIP,uPort,0);,请教大神们,该如何解决?????谢谢。

源代码如下:

DWORD __stdcall ThreadProc(LPVOID lpParameter)

{

CBroadcastClientDlg* pDlg = (CBroadcastClientDlg*)lpParameter;

CString str;

char szRecv[50];

CString szIP("192.168.43.200");

UINT uPort=8552;

//接收UDP数据

while(1)

{  int iRecv=pDlg->m_sockRecv.ReceiveFrom(szRecv,50,szIP,uPort,0);

//pDlg->MessageBox("连接失败");  //可以执行

TRACE("received %d byte\n",iRecv);

szRecv[iRecv]='\0';

str=szRecv;

pDlg->m_ctrlEDIT1.SetWindowText(str);

pDlg->m_ctrlEDIT1.Invalidate();

/* for (int i=0; i<99999;i++)  //单线程计数,用于验证多线程

{

str.Format("%d",i);

pDlg->m_ctrlEDIT1.SetWindowText(str);

pDlg->m_ctrlEDIT1.Invalidate();

} */

/* CBroadcastClientDlg* pDlg = (CBroadcastClientDlg*)lpParameter;  //单线程进度条,用于验证单线程

pDlg->m_ctrlProg.SetRange32(0,999999);

for (int i=0; i<999999;i++)

{

pDlg->m_ctrlProg.SetPos(i);

}*/

}

return 0;


}

void CBroadcastClientDlg::OnOK() 

{

// TODO: Add extra validation here

m_hThread = CreateThread(NULL,0,ThreadProc,this,0,NULL);

 // m_hThread= (HANDLE)_beginthreadex(NULL,0,ThreadProc,this,0,NULL);

}


分享到:
精彩评论 1
李木子
学分:2954 LV11
2019-08-14
沙发

你好:

   请运行光盘源码试试

首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照