读书人

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

发布时间: 2013-04-21 21:18:07 作者: rapoo

网络通信程序接收数据问题(UDP)
本帖最后由 Jennypan2009 于 2011-09-04 13:53:29 编辑 我写了一个基于对话框的网络通信程序。发送数据端没有问题。想实现接收端持续接收数据。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。

初学者很不解。
请高手给看看这是什么原因?
[解决办法]
捡分。恭喜楼主。

读书人网 >VC/MFC

热点推荐