《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > WINCE上實(shí)現(xiàn)UDP通信(100%可行?。?/span>
WINCE上實(shí)現(xiàn)UDP通信(100%可行!)
摘要: 首先介紹一下,開發(fā)平臺:WINCE4.2(WINCE5.0也適用,因?yàn)槭褂昧遂o態(tài)編譯MFC動(dòng)態(tài)鏈接庫);開發(fā)工具:VS2005。
關(guān)鍵詞: 接口IC WinCE UDP 通信
Abstract:
Key words :

  首先介紹一下,開發(fā)平臺:WINCE 4.2 (WINCE 5.0也適用,因?yàn)槭褂昧遂o態(tài)編譯MFC動(dòng)態(tài)鏈接庫);開發(fā)工具:VS2005。

  接下來開始修改代碼:

  view plaincopy to clipboardprint?

  1.修改UDP_CE.CPP的SendData函數(shù)為:

  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;

  }

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

  2.修改UDP_CE.CPP的RecvThread函數(shù)為:

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

  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

  {

  //此處添加解析程序,將接收到的數(shù)據(jù)解析后,

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

  delete []recvBuf;

  recvBuf = NULL;

  delete []recvedBuf;

  recvedBuf = NULL;

  }

  }

  3.修改UDPDlg.cpp.CPP的OnUdpCERecv函數(shù)為:

  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,不是必須,但可以節(jié)省多余的代碼

  typedef struct CUDPData

  {

  char FrameHead[4]; //幀頭

  DWORD DataPackageLen; //幀長度

  char * Buf; //緩沖區(qū)數(shù)據(jù)

  char FrameTail[4]; //幀尾

  }UDPData;

  1.修改UDP_CE.CPP的SendData函數(shù)為:

  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;

  }

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

  2.修改UDP_CE.CPP的RecvThread函數(shù)為:

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

  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

  {

  //此處添加解析程序,將接收到的數(shù)據(jù)解析后,

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

  delete []recvBuf;

  recvBuf = NULL;

  delete []recvedBuf;

  recvedBuf = NULL;

  }

  }

  3.修改UDPDlg.cpp.CPP的OnUdpCERecv函數(shù)為:

  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,不是必須,但可以節(jié)省多余的代碼

  typedef struct CUDPData

  {

  char FrameHead[4]; //幀頭

  DWORD DataPackageLen; //幀長度

  char * Buf; //緩沖區(qū)數(shù)據(jù)

  char FrameTail[4]; //幀尾

  }UDPData;還可以刪除窗體上發(fā)送、接收數(shù)字的編輯框等,因?yàn)閷?shí)際應(yīng)用中用不上。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 午夜性色一区二区三区不卡视频| 中文字幕精品一区二区2021年 | 久久久久久AV无码免费看大片| 久久人人爽人人爽人人av东京热| 一区二区三区在线|日本| аⅴ天堂中文在线网| 在线观看国产成人av片| 精品99在线观看| 男女一进一出猛进式抽搐视频| 欧美不卡视频在线| 快点cao我要被cao烂了| 天天干天天射综合网| 国产成人免费A在线视频| 国产人va在线| 午夜免费小视频| 亚洲一区二区三区在线观看蜜桃| 中文天堂最新版www| porn在线精品视频| 黑人系列合集h| 色94色欧美sute亚洲线| 欧美巨大xxxx做受高清| 尹人久久久香蕉精品| 国产成人综合亚洲AV第一页| 四虎一影院区永久精品| 人妻一本久道久久综合久久鬼色 | 蜜桃AV噜噜一区二区三区| 精品无码一区二区三区在线| 欧美大香线蕉线伊人图片| 好吊妞免费视频| 国产精品亚洲综合五月天| 国产剧果冻传媒星空在线| 免费a级毛片视频| 亚洲ⅴ国产v天堂a无码二区| 五月天丁香在线| 一级免费黄色毛片| 97热久久免费频精品99| 国产精品www| 欧美黑人巨大videos在线| 岛国片免费在线观看| 国产三级在线观看免费| 伊人久久大香线蕉综合网站|