WINCE 에서 UDP 통신 실현 (100% 가능!)

본문 은 다음 과 같다. http://blog.csdn.net/hellogv/
먼저, 개발 플랫폼: WINCE 4.2 (WINCE 5.0 도 적 용 됩 니 다. 정적 컴 파일 MFC 동적 링크 라 이브 러 리 를 사 용 했 기 때 문 입 니 다).개발 도구: VS 2005.
다음 코드 는 중국 수리 수전 출판사 www.waterpub.com.cn 의 'EVC 고급 프로 그래 밍 및 응용 개발' 이라는 책 에서 나 왔 습 니 다. WINCE 의 UDP 통신 을 실현 하려 면 먼저 수리 수전 출판사 에 가서 원래 의 UDP 프로 그래 밍 코드 를 다운로드 하 십시오.물론 수정 하기 싫 으 면 내 가 이미 만 든 인 스 턴 스 코드 를 직접 다운로드 할 수 있다.
다음 코드 수정 시작:
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;

실제 응용 프로그램 에서 사용 할 수 없 기 때문에 창 에 숫자 를 보 내 고 받 는 편집 상자 등 도 삭제 할 수 있다.

좋은 웹페이지 즐겨찾기