网络通信程序接收数据问题(UDP)
我写了一个基于对话框的网络通信程序。发送数据端没有问题。想实现接收端持续接收数据。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。
初学者很不解。
请高手给看看这是什么原因?