当前位置:主页 > 建站知识 > APP开发 >

WINCE上实现UDP通信(100%可行!)

发布时间:2022-10-28 01:30   浏览次数:次   作者:必博体育
本文摘要:最先解读一下,产品研发服务平台:WINCE4.2(WINCE5.0也仅限于,由于用以了静态数据c语言编译器MFC动态链接库);开发环境:VS2005。 接下去刚开始改动编码: viewplaincopytoclipboardprint?

必博官网-国际平台

最先解读一下,产品研发服务平台:WINCE4.2(WINCE5.0也仅限于,由于用以了静态数据c语言编译器MFC动态链接库);开发环境:VS2005。  接下去刚开始改动编码:  viewplaincopytoclipboardprint?  1.改动UDP_CE.CPP的SendData函数为:  boolCUDP_CE::SendData(constchar*buf,intlen)  {  intnBytes=0;  intnErrorCode;  nBytes=sendto(m_UDPSocket,buf,len,0,(sockaddr*)m_RemoteAddr,sizeof(m_RemoteAddr));  if(nBytes==SOCKET_ERROR)  {  nErrorCode=WSAGetLastError();  m_OnUdpError(m_pOwnerWnd,nErrorCode);  returnfalse;  }  returntrue;  }  自然,不必还记得改动UDP_CE.h的SendData函数声明为:boolSendData(constchar*buf,intlen);  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=newchar[1024];  recvedBuf=newchar[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;  }  elseif(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);  CStringstrRecv(buf);  pRecvStrEdit-》SetWindowText(strRecv);  4.移除UDP_CE.H,并不是必不可少,但能够节约不必要的编码  typedefstructCUDPData  {  charFrameHead[4];//帧头  DWORDDataPackageLen;//帧长短  char*Buf;//缓冲区域数据信息  charFrameTail[4];//帧尾  }UDPData;  1.改动UDP_CE.CPP的SendData函数为:  boolCUDP_CE::SendData(constchar*buf,intlen)  {  intnBytes=0;  intnErrorCode;  nBytes=sendto(m_UDPSocket,buf,len,0,(sockaddr*)m_RemoteAddr,sizeof(m_RemoteAddr));  if(nBytes==SOCKET_ERROR)  {  nErrorCode=WSAGetLastError();  m_OnUdpError(m_pOwnerWnd,nErrorCode);  returnfalse;  }  returntrue;  }  自然,不必还记得改动UDP_CE.h的SendData函数声明为:boolSendData(constchar*buf,intlen);  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=newchar[1024];  recvedBuf=newchar[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;  }  elseif(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);  CStringstrRecv(buf);  pRecvStrEdit-》SetWindowText(strRecv);  4.移除UDP_CE.H,并不是必不可少,但能够节约不必要的编码  typedefstructCUDPData  {  charFrameHead[4];//帧头  DWORDDataPackageLen;//帧长短  char*Buf;//缓冲区域数据信息  charFrameTail[4];//帧尾  }UDPData;还能够移除文本框上发送至、对接数据的编辑框等,由于具体运用于中用不到。

  文中来源于CSDNblog,发表要求标出全文:http://blog.csdn.net/hellogv/archive/2007/11/10/1878355.。


本文关键词:WINCE,上,实现,必博官网-国际平台,UDP,通信,100%,可行,最先,解读

本文来源:必博体育-www.dgmaoxin.com