Windows CE嵌入式高级编程及其实例详解12(3)

2025-11-15

/★★★★★★★★★★★★★★★★★★★★★★★★★★★程序清单l2—4★★★★★★++★++★★★★★★★★★★★★/ p

+函数介绍:接收线程函数

*入口参数:iparam:指传进线程的参数 *出口参数:(无) *返回值:、无意义。 ★f

UINT CUDP CE::RecvThread(LPVOID iparam) (

CUDP CE*pSocket=(CUDP—CE+)iparam; fd set fdRead; int ret;

TIMEVAL aTime j aTime.tv sec=1; aTime.tv usec=0; SOCKADDR IN tmpAddr; int tmpRecVLen; 。 int recvLen; int iErrorCode; while(TRUE) {

//收到退出事件,结束线程

if fwaitF。rSingleObj ect(pSocket->m__ExitThreadEvent,O)==WAIT_OBJECT 0) (

break; )

//将set初始化为空集合 FD ZERO(&fdRead);

//藉pSocket一>m—UDPSocket套接字添加到集合中 FD SET(pSocket->m—UDPSocket,&fdRead); //调用select函数,判断套接字Il0状态

ret:select(0,&fdRead,NULL,NULL,&aTime); if(ret==SOCKET—ERROR) {

iErrorCode =WSAGetLastError(); if(pSocket一>m_OnUdpError) {

oSocket一>m OnUdpError(pSocket一>m pOwner,iErrorCode); }

break;

}

//有事件发生 if(ret>0)

//收到数据

if(FD—ISSET(pSocket一>m—UDPSocket,&fdRead)) ,

f f

tmpAddr.sin—family=AF—INET;

tmpAddr·sin_port 2 htons(pSocket一>m—RemoteAddr.sin_port); tmpAddr.sin addr.s addr=INADDR ANY; tmpRecvLen=sizeof(tmpAddr)j //置空接收缓冲区

ZeroMemory(pSocket一>m recvBuf,4096); //接收数据

recvLen 2 recvfrom(pSocket一>m_UDPSocket,pSocket一>m_recvBuf, 4096,0,(SOCKADDR+)&tmpAddr,&tmpRecvLen); i f f recvLen==SOCKET ERROR) f

iErrorCode=WSAGetLastError()j if(pSocket‘。>m_OnUdpError) {

pSocket一>m_OnUdpError(pSocket一>m_pOwner,iErrorCode); } ’

else if(recvLen==0) .

iErrorCode=WSAGetLastError(); if(pSocket一>m OnUdpError) {

pSocket一>m_OnUdpError(pSocket一>m_pOwner,iErrorCode); } ) else {

//调用回调函数将数据发送出去 if(pSocket‘>m_OnUdpRecv) f

pSocket一>m_OnUdpRecv(pSocket一>m_pOwner,pSocket一> m_recvBuf,recvLen,(SOCKADDR*)&tmpAddr)j } } ) } }

TRACE(L”The read thread had exited.\n-·)j

Windows CE嵌入式高级编程及其实例详解(用c++实现) return 0; )

/★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★+★★++★+★★++/

至此,CUDP CE类就设计完成了,下面就来看看CUDP CE类的使用效果。 (3)设计主对话框,实现UDP通讯。 1)设计如图l2.3所示的主对话框。

图12.3使用CUDP_CE类示例界面

窗体上的主要控件及其属性设置如表l2—1所示。

表12—1 CUDP CE类使用例子界面控件及其属性设置表 控制lD IDC——EDIT——REMOTEHOST IDC——EDIT——REMOTEPORT 备注 编辑框,用于输入远程lP地址,对应成员变量: m—RemoteHost,类型CString 编辑框,用于输入远程端121,对应成员变量:m—RemotePort, 类型int IDC—EDl££0CALPORT IDC——BTN——0PEN IDC——BTN——CLOSE IDC—B刀吐SEND IDC——EDT——SEND IDC——EDT——RECV

编辑框,用于输入本地端口,对应成员变量:m_LocalPort, 类型int 按钮,标题设为“打开”,用于打开UDP服务 按钮,标题设为“关闭”,用于关闭UDP服务 按钮,标题设为“发送”,用于发送数据 编辑框,用于输入发送的字符串 编辑框,用于显示接收到的字符串 2)在CUDPDemoDl9类中添加CUDP CE类私有变量。代码片段如下:

private:

//定义UDP通讯类变量 CUDP—CE m—CEUdp j

注意:在UDPDEMODl9.h文件要引用UDP CE.h,因为这里使用到了CUDP CE类。

3)添加“打开”、“关闭”和“发送数据”按钮的单击事件代码。“打开”按钮用于打开指

定的UDP服务端口,基于此端口可以进行UDP数据报的发送和接收;“关闭”按钮用于关闭 打开的UDP端口,释放相关资源;“发送数据”用于向指定的远程地址和端口发送数据。 这3个事件函数的实现如程序清单l2—5所示。


Windows CE嵌入式高级编程及其实例详解12(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:物理化学上期末试题

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219