当前位置: 首页 > news >正文

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

本文来自: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下载我已经弄好的实例代码。

接下来开始修改代码:

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;

还可以删除窗体上发送、接收数字的编辑框等,因为实际应用中用不上。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java中有地址吗_java web开发中各类地址的写法
  • Steve Lasker 在 Tech Ed Barcelona 2007 上的 SQL Server Compact 课程
  • java实现插入排序_数据结构与算法—插入排序(Java实现)
  • 解决RichEdit line insertion error的方法
  • 与普元李健民的串吧聚会
  • 北京 Java软件工程师薪资_【北京京东工资】java高级软件工程师待遇-看准网
  • 秋天的植物园
  • maven改java文件自动部署_Runoob-Java-Maven:Maven 自动化部署
  • XPe开发初体验(一)XPe概述
  • mysql 选text blob_MySQL使用TEXT/BLOB类型的知识点详解
  • 排序算法之插入排序
  • java线程唤醒线程_java基本教程之java线程等待与java唤醒线程 java多线程教程
  • 迅速删除非法文件名代码的 0day 呵呵
  • java 并发安全_Java 并发 – 线程安全?
  • 参加China Foo Camp随感(组图)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • C# 免费离线人脸识别 2.0 Demo
  • es6--symbol
  • github从入门到放弃(1)
  • JavaScript HTML DOM
  • JavaScript-Array类型
  • laravel with 查询列表限制条数
  • Nodejs和JavaWeb协助开发
  • oschina
  • php的插入排序,通过双层for循环
  • python docx文档转html页面
  • SSH 免密登录
  • 创建一种深思熟虑的文化
  • 基于游标的分页接口实现
  • 今年的LC3大会没了?
  • 那些被忽略的 JavaScript 数组方法细节
  • 数据仓库的几种建模方法
  • 你对linux中grep命令知道多少?
  • 我们雇佣了一只大猴子...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​学习一下,什么是预包装食品?​
  • #stm32整理(一)flash读写
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)ssm码农论坛 毕业设计 231126
  • (转) ns2/nam与nam实现相关的文件
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET 4.0中的泛型协变和反变
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .Net7 环境安装配置
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .skip() 和 .only() 的使用
  • .考试倒计时43天!来提分啦!
  • ?php echo ?,?php echo Hello world!;?
  • @RequestBody的使用
  • @Responsebody与@RequestBody