⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ceudp.h

📁 WinCE下利用UDP和上位机进行网络通讯的例子
💻 H
字号:
// CEUDP.h: interface for the CCEUDP class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CEUDP_H__9D1E867E_58EC_45C5_B886_3BC0E163A375__INCLUDED_)
#define AFX_CEUDP_H__9D1E867E_58EC_45C5_B886_3BC0E163A375__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "WinSock.h"

#pragma pack(push, 1)

const LPCSTR FRAMEHEAD = "!@#$";	// 数据包头
const LPCSTR FRAMETAIL = ")(*&";	// 数据包尾

// UDP传输数据包结构
typedef struct UDPData
{
	char  FrameHead[4];		// 帧头
	DWORD DataPackageLen;	// 帧长度
	char* Buf;				// 缓冲区数据
    char  FrameTail[4];		// 帧尾
} UDPData;

#pragma pack(pop)

// 发送错误、接收数据的回调函数 (需在主程序中实现)
typedef void (CALLBACK* ONUDPERROR)(CWnd*,int);
typedef void (CALLBACK* ONUDPRECV)(CWnd*,char* buf,int bufLen,sockaddr*);

// WinCE下利用UDP通讯的类
class CCEUDP  
{
public:
	CCEUDP();
	virtual ~CCEUDP();

public:
	// 接口函数
    DWORD Open(CWnd* pWnd,int localPort, LPCTSTR remoteHost ,int remotePort);	//打开UDP通讯
	DWORD Close(void);	//关闭UDP通讯
	DWORD SendData(const char *buf, int len);	//发送数据

    // 接口事件
    ONUDPERROR m_OnUdpError;	// UDP发生错误事件
    ONUDPRECV  m_OnUdpRecv;		// UDP接收数据事件

private:
	SOCKET m_UDPSocket;                   //UDP Socket通讯套接字
    struct sockaddr_in m_RemoteAddr;      //存储远程通讯地址
    HANDLE m_ExitThreadEvent;             //线程退出事件
	CWnd * m_pOwnerWnd;                   //存储父窗体句柄

	// 内部函数
    static UINT RecvThread(LPVOID lparam);	// 通讯线程函数
	bool HandlePackage(const char *inBuf, int inBufLen, char *outBuf, int &outBufLen);	// 数据拆包函数
    int pos(LPCSTR aSubStr, const char *aBuf, int len);	// 查找字符串中的子串
};

#endif // !defined(AFX_CEUDP_H__9D1E867E_58EC_45C5_B886_3BC0E163A375__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -