#pragma once #include "IYUDPServer.h" #include #ifndef _WIN32 #include #include #include #include #include #include #define SOCKET int #define INVALID_SOCKET -1 #else #include #endif class CYUDPServer : public IYUDPServer { public: CYUDPServer(); ~CYUDPServer() = default; public: /** * 初始化服务 * @brief Init * @return */ virtual int Init(const int nPort) override; /** * 开始接收UDP数据 * @brief StartUDPServer * @return */ virtual int StartUDPServer(UdpRecvDataFunc pRecvDataFunc, bool bRecvSelfProtocol) override; /** * 结束接收UDP数据 * @brief StopUDPServer * @return */ virtual int StopUDPServer() override; /** * 发送数据 * @brief SendData * @param pData * @param nLen * @return */ virtual int SendData(const sockaddr_in clientPeer, const char* pData, const int nLen) override; private: /** * 接收数据 * @brief _UdpRecvData * @param pThis */ static void _UdpRecvData(CYUDPServer* pThis); /** * 接收数据任务 * @brief _UdpRecvTask */ void _UdpRecvTask(); /** * 关闭通信 * @brief _CloseSocket */ void _CloseSocket(); private: SOCKET m_socketfd; bool m_bRecv; bool m_bRecvRuning; UdpRecvDataFunc m_funcRecvCallback; };