《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 設計應用 > WINCE上實現UDP通信(100%可行!)
WINCE上實現UDP通信(100%可行!)
摘要: 首先介紹一下,開發平臺:WINCE4.2(WINCE5.0也適用,因為使用了靜態編譯MFC動態鏈接庫);開發工具:VS2005。
關鍵詞: 接口IC WinCE UDP 通信
Abstract:
Key words :

  首先介紹一下,開發平臺:WINCE 4.2 (WINCE 5.0也適用,因為使用了靜態編譯MFC動態鏈接庫);開發工具:VS2005。

  接下來開始修改代碼:

  view plaincopy to clipboardprint?

  1.修改UDP_CE.CPP的SendData函數為:

  bool CUDP_CE::SendData(const char *buf, int len)

  {

  int nBytes = 0;

  int nErrorCode;

  nBytes = sendto(m_UDPSocket,buf,len,0,(sockaddr*)&m_RemoteAddr,sizeof(m_RemoteAddr));

  if (nBytes==SOCKET_ERROR )

  {

  nErrorCode = WSAGetLastError();

  m_OnUdpError(m_pOwnerWnd,nErrorCode);

  return false;

  }

  return true;

  }

  當然,不要忘記修改UDP_CE.h的SendData函數聲明為:bool SendData(const char *buf, int len);

  2.修改UDP_CE.CPP的RecvThread函數為:

  。..。..。..。..。..

  if (ret 》 0)

  {

  if (FD_ISSET(pSocket-》m_UDPSocket,&fdRead))

  {

  tmpAddr.sin_family=AF_INET;

  tmpAddr.sin_port = htons(pSocket-》m_RemoteAddr.sin_port);

  tmpAddr.sin_addr.s_addr =INADDR_ANY;

  tmpRecvLen = sizeof(tmpAddr);

  recvBuf = new char[1024];

  recvedBuf = new char[1024];

  ZeroMemory(recvBuf,1024);

  ZeroMemory(recvedBuf,1024);

  recvLen = recvfrom(pSocket-》m_UDPSocket,recvBuf, 1024,0,(SOCKADDR*)&tmpAddr,&tmpRecvLen);

  if (recvLen == SOCKET_ERROR)

  {

  iErrorCode = WSAGetLastError();

  pSocket-》m_OnUdpError(pSocket-》m_pOwnerWnd,iErrorCode);

  break;

  }

  else if (recvLen == 0)

  {

  iErrorCode = WSAGetLastError();

  pSocket-》m_OnUdpError(pSocket-》m_pOwnerWnd,iErrorCode);

  break;

  }

  else

  {

  //此處添加解析程序,將接收到的數據解析后,

  pSocket-》m_OnUdpRecv(pSocket-》m_pOwnerWnd,recvBuf,recvedBufLen,(SOCKADDR*)&tmpAddr);

  delete []recvBuf;

  recvBuf = NULL;

  delete []recvedBuf;

  recvedBuf = NULL;

  }

  }

  3.修改UDPDlg.cpp.CPP的OnUdpCERecv函數為:

  CUDPDlg * pDlg;

  pDlg = (CUDPDlg*)pWnd;

  CEdit *pRecvStrEdit = (CEdit*)pDlg-》GetDlgItem(IDC_EDIT_RECVSTR);

  ASSERT(pRecvStrEdit != NULL);

  CString strRecv (buf);

  pRecvStrEdit-》SetWindowText(strRecv);

  4.刪除UDP_CE.H,不是必須,但可以節省多余的代碼

  typedef struct CUDPData

  {

  char FrameHead[4]; //幀頭

  DWORD DataPackageLen; //幀長度

  char * Buf; //緩沖區數據

  char FrameTail[4]; //幀尾

  }UDPData;

  1.修改UDP_CE.CPP的SendData函數為:

  bool CUDP_CE::SendData(const char *buf, int len)

  {

  int nBytes = 0;

  int nErrorCode;

  nBytes = sendto(m_UDPSocket,buf,len,0,(sockaddr*)&m_RemoteAddr,sizeof(m_RemoteAddr));

  if (nBytes==SOCKET_ERROR )

  {

  nErrorCode = WSAGetLastError();

  m_OnUdpError(m_pOwnerWnd,nErrorCode);

  return false;

  }

  return true;

  }

  當然,不要忘記修改UDP_CE.h的SendData函數聲明為:bool SendData(const char *buf, int len);

  2.修改UDP_CE.CPP的RecvThread函數為:

  。..。..。..。..。..

  if (ret 》 0)

  {

  if (FD_ISSET(pSocket-》m_UDPSocket,&fdRead))

  {

  tmpAddr.sin_family=AF_INET;

  tmpAddr.sin_port = htons(pSocket-》m_RemoteAddr.sin_port);

  tmpAddr.sin_addr.s_addr =INADDR_ANY;

  tmpRecvLen = sizeof(tmpAddr);

  recvBuf = new char[1024];

  recvedBuf = new char[1024];

  ZeroMemory(recvBuf,1024);

  ZeroMemory(recvedBuf,1024);

  recvLen = recvfrom(pSocket-》m_UDPSocket,recvBuf, 1024,0,(SOCKADDR*)&tmpAddr,&tmpRecvLen);

  if (recvLen == SOCKET_ERROR)

  {

  iErrorCode = WSAGetLastError();

  pSocket-》m_OnUdpError(pSocket-》m_pOwnerWnd,iErrorCode);

  break;

  }

  else if (recvLen == 0)

  {

  iErrorCode = WSAGetLastError();

  pSocket-》m_OnUdpError(pSocket-》m_pOwnerWnd,iErrorCode);

  break;

  }

  else

  {

  //此處添加解析程序,將接收到的數據解析后,

  pSocket-》m_OnUdpRecv(pSocket-》m_pOwnerWnd,recvBuf,recvedBufLen,(SOCKADDR*)&tmpAddr);

  delete []recvBuf;

  recvBuf = NULL;

  delete []recvedBuf;

  recvedBuf = NULL;

  }

  }

  3.修改UDPDlg.cpp.CPP的OnUdpCERecv函數為:

  CUDPDlg * pDlg;

  pDlg = (CUDPDlg*)pWnd;

  CEdit *pRecvStrEdit = (CEdit*)pDlg-》GetDlgItem(IDC_EDIT_RECVSTR);

  ASSERT(pRecvStrEdit != NULL);

  CString strRecv (buf);

  pRecvStrEdit-》SetWindowText(strRecv);

  4.刪除UDP_CE.H,不是必須,但可以節省多余的代碼

  typedef struct CUDPData

  {

  char FrameHead[4]; //幀頭

  DWORD DataPackageLen; //幀長度

  char * Buf; //緩沖區數據

  char FrameTail[4]; //幀尾

  }UDPData;還可以刪除窗體上發送、接收數字的編輯框等,因為實際應用中用不上。

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 毛片免费视频在线观看| 黑人一级大毛片| 无码av中文一区二区三区桃花岛 | 日日摸日日碰夜夜爽亚洲| 亚洲熟女综合色一区二区三区| 色www永久免费| 国产福利小视频在线| a毛片在线免费观看| 无码成人AAAAA毛片| 亚洲不卡av不卡一区二区| 窝窝视频成人影院午夜在线| 国产免费一区二区三区不卡| 8av国产精品爽爽ⅴa在线观看| 性色欲网站人妻丰满中文久久不卡| 久久精品青青大伊人av| 波多野结av衣东京热无码专区| 啊灬啊灬啊灬深灬快用力| 国模欢欢炮交150视频| 国内精品人妻无码久久久影院导航| 三级网站在线播放| 日韩一级片网址| 亚洲国产成人va在线观看网址| 疯狂三人交性欧美| 国产一区日韩二区欧美三区| 精品福利视频导航| 国产精品青草久久| www.夜夜操| 成全影视免费观看大全二| 久久精品国产一区二区电影| 欧美日韩精品一区二区三区不卡| 别揉我胸啊嗯上课呢的作文| 豪妇荡乳1一5白玉兰免费下载| 国产精品lululu在线观看| 97av麻豆蜜桃一区二区| 女教师巨大乳孔中文字幕| 中文字幕丰满乱孑伦无码专区 | 久久香蕉国产线看精品| 国内一卡2卡三卡四卡在线| 一区二区三区四区在线播放| 无码一区18禁3D| 久久国产精品2020盗摄|