在WINCE上实现UDP通信(100%可行!)
2007-11-10 23:19
465 查看
本文来自:http://blog.csdn.net/hellogv/
首先介绍一下,开发平台:WINCE 4.2 (WINCE 5.0也适用,因为使用了静态编译MFC动态链接库);开发工具:VS2005。
以下的代码,来自中国水利水电出版社(www.waterpub.com.cn)的《EVC高级编程及其应用开发》这本书,若想实现WINCE的UDP通信,请先到水利水电出版社下载原本的UDP编程代码。当然,你懒得修改的话,可以直接到http://download.csdn.net/source/282307 下载我已经弄好的实例代码。
接下来开始修改代码:
还可以删除窗体上发送、接收数字的编辑框等,因为实际应用中用不上。
首先介绍一下,开发平台:WINCE 4.2 (WINCE 5.0也适用,因为使用了静态编译MFC动态链接库);开发工具:VS2005。
以下的代码,来自中国水利水电出版社(www.waterpub.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;
还可以删除窗体上发送、接收数字的编辑框等,因为实际应用中用不上。
相关文章推荐
- 在WINCE上实现UDP通信(100%可行!)
- 使用JAVA实现Socket通信,TCP、UDP简析。
- socket编程实现一个简单的多人通信(udp)
- Node.js权威指南 (7) - 实现基于TCP与UDP的数据通信
- Java+利用UDP实现简单双机通信
- Java 实现简单的UDP通信
- C++实现UDP通信。。
- python实现UDP程序通信
- JAVA用UDP实现通信
- Linux c==使用UDP实现网络通信(14)
- 用MINA实现UDP通信的例子
- Android实现UDP通信
- udp通信C++实现的细节
- 自己实现RMI(四)socket通信方案之UDP通信
- Python 实现socket通信 (UDP)
- UDP实现的广播通信
- Node.js:dgram模块实现UDP通信
- python网络编程-使用socket实现S/C之间的UDP通信
- TCP与UDP通信协议及Java实现
- TCP/IP详解(卷2实现)学习笔记(一)udp的socket通信过程底层实现概述(1)