WINCEでUDP通信を実現する(100%実行可能!)


本論文はhttp://blog.csdn.net/hellogv/から来ている.
まず紹介します.開発プラットフォーム:WINCE 4.2(WINCE 5.0も適用されます.MFCダイナミックリンクライブラリを静的にコンパイルしたので).開発ツール:VSS 2005.
以下のコードは中国水利水電出版社(wwww.waterpb.com.cn)の『EVC高級プログラミングと応用開発』から来ています.WINCEのUDP通信を実現するには、まず水力発電出版社に行って元のUDPプログラミングコードをダウンロードしてください.もちろん、あなたが修正を怠ったら、私が作ったインスタンスコードをhttp://download.csdn.net/source/282307に直接ダウンロードしてもいいです.
コードの変更を開始します.
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;
フォームから送信された数値を受信する編集枠なども削除できます.実際のアプリケーションでは使えないからです.