首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-04-21 
网络通信程序接收数据问题(UDP)本帖最后由 Jennypan2009 于 2011-09-04 13:53:29 编辑我写了一个基于对话

网络通信程序接收数据问题(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。

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

热点排行