激情九九,六月婷婷七月丁香,天天五月天丁香婷婷深爱综合,国产色一区,国产一区二区三区免费在线观看,91最新网站

WINCE上實現UDP通信(100%可行!)

來源:網絡

點擊:2113

A+ A-

所屬頻道:新聞中心

關鍵詞: WINCE,UDP通信

      首先介紹一下,開發平臺: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;還可以刪除窗體上發送、接收數字的編輯框等,因為實際應用中用不上。

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    主站蜘蛛池模板: 国产色区| 欧美成人久久久免费播放 | 青草国产精品久久久久久 | 四虎免费永久网站入口 | 国产一级视频播放 | 激情六月丁香婷婷 | 免费视频你懂的 | 日韩亚洲综合精品国产 | 久久国产精品夜色 | 女大学生的沙龙室电影 | 美女私密视频网站 | 黄色网站小视频 | 国产成人aa在线观看视频 | 日韩欧美在线精品 | 精品久久中文字幕有码 | 极情综合网 | 国产午夜精品一区二区三区不卡 | 久久久一级 | 国产永久一区二区三区 | 日韩国产在线 | 久久国产精品久久精 | 九九精品视频一区二区三区 | 国产精品免费观看网站 | 放荡的美妇一区二区三区 | 青青久久国产成人免费网站 | 四虎影视成人精品 | 国产精品一级毛片不收费 | 国产视频高清在线 | 欧美女人性视频 | 国产真实各种门事件网站 | 成 人 亚洲 综合天堂 | 99精品久久99久久久久久 | 久久久久久青草大香综合精品 | 欧美在线一区二区 | 欧美激情精品久久久久久不卡 | 精品福利视频一区二区三区 | 久久国产精品99久久久久久牛牛 | 国产色视频在线 | 免费精品视频在线 | 四虎影视色费永久在线观看 | 借种免费在线观看 |