网络通信程序接收数据问题(UDP)

Jennypan2009 2011-09-04 01:33:56
我写了一个基于对话框的网络通信程序。发送数据端没有问题。想实现接收端持续接收数据。recvData是接收数据是结构体,Edit控件关联的m_num是成员变量
1,利用定时器
代码:
OnTimer(UINT nIDEvent)
{
int len=sizeof(SOCKADDR);
char recvbuf[200];
int recval;
RECVDATA recvData;

reval = recvfrom(m_socket,recvbuf,200,0,(SOCKADDR*)&addrFrom,&len);
if(SOCKET_ERROR == reval)
{
int a = WSAGetLastError();
AfxMessageBox("接收数据失败!");
return;
}

memcpy(&recvData,recvbuf,sizeof(recvbuf));

m_num1 = recvData.a;
m_num2 = recvData.b;
m_num3 = recvData.c;
UpdateData(0);

CDialog::OnTimer(nIDEvent);

}
此代码运行正常

2.利用接收按钮控件响应函数中加入while循环,将上段程序移植到循环语句中调试时利用断点,发现程序是执行完毕,在watch栏中查看m_num值是正确的,但对话框上未有更新。

3.用接收线程,在按下接收控件后创建接收线程,传递的是this指针:
DWORD WINAPI RecvProc(LPVOID lpParameter)
{
CStrucDialogSDlg *Dlg = (CStrucDialogSDlg *)lpParameter;

int len=sizeof(SOCKADDR);
char recvbuf[200];
int recval;
RECVDATA recvData;
SOCKADDR_IN addrFrom1;

reval = recvfrom(pDlg->m_socket,recvbuf,200,0,(SOCKADDR*)&addrFrom1,&len);
if(SOCKET_ERROR == reval)
{
int a = WSAGetLastError();
AfxMessageBox("接收数据失败!");
return 0;
}

memcpy(&recvData,recvbuf,sizeof(recvbuf));

pDlg->m_num1 = recvData.a;
pDlg->m_num2 = recvData.b;
pDlg->m_num3 = recvData.c;
pDlg->UpdateData(0);

return 1;

}
未加循环,调试显示接收数据失败 a=10040。

初学者很不解。
请高手给看看这是什么原因?
...全文
153 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
一个傻冒 2013-04-15
  • 打赏
  • 举报
回复
捡分。恭喜楼主。
Jennypan2009 2013-04-15
  • 打赏
  • 举报
回复
已解决,无人应答结贴。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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