📄 ceudp.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 + -