86 lines
1.3 KiB
C++
86 lines
1.3 KiB
C++
#pragma once
|
|
#include "IYUDPServer.h"
|
|
#include <cstdio>
|
|
|
|
#ifndef _WIN32
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <sys/types.h>
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <unistd.h>
|
|
#define SOCKET int
|
|
#define INVALID_SOCKET -1
|
|
#else
|
|
#include <WS2tcpip.h>
|
|
#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;
|
|
|
|
};
|