📄 vudpservice.cpp
字号:
/*************************************************************************** vudpservice.cpp - description ------------------- begin : 01.06 10:18:00 CST 2004 copyright : (C) 2004 by |LiuZhong| email : |zliu@foundermn.com| ***************************************************************************//*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "vudpservice.h"int VUdpService::Send(const char* pData,int Size,const char* ToAddr,int ToPort){ int Len = -1; if(m_bRunning){ m_CritiSend.Lock(); m_ServerRs.SetDestAddr((char*)ToAddr,ToPort); Len = m_ServerRs.SendTo((char*)pData,Size); m_CritiSend.Unlock(); } return Len;}int VUdpService::Receive(char* pData,int Size){ int Len = -1; if(m_bRunning){ m_CritiRecv.Lock(); Len = m_ServerRs.RecvFrom(pData,Size); m_CritiRecv.Unlock(); } return Len;}int VUdpService::Receive(char* pData,int Size,char* FromAddr, int* FromPort,int MSec){ int Len = -1; if(m_bRunning){ m_CritiRecv.Lock(); Len = m_ServerRs.RecvFrom(pData,Size,MSec); if(Len>0){ m_ServerRs.GetRecvFromAddr(FromAddr,FromPort); } m_CritiRecv.Unlock(); } return Len; }VUdpService::VUdpService(){ m_bRunning = false; m_BufSize = -1;}VUdpService::~VUdpService(){ Close();}void VUdpService::SetReceiveBuf(int BufSize){ m_BufSize = BufSize;}bool VUdpService::Start(const char* Address,int Port){ bool bSuccess = false; if(!m_bRunning){ if(m_ServerRs.Create()==RS_OK){ m_ServerRs.SetReUseAddr(true); if(m_BufSize>0) m_ServerRs.SetRecvBufSize(m_BufSize); if(m_ServerRs.Bind((char*)Address,Port)==RS_OK){ m_bRunning = true; bSuccess = true; } } } return bSuccess; }void VUdpService::Close(){ m_bRunning = false; m_ServerRs.Close(); }void VUdpService::DoService(int MSec){ char FromAddr[64]; int FromPort; while(m_bRunning){ int Sw = m_ServerRs.SelectWait(MSec); if(Sw==FD_READ){ int Len = m_ServerRs.GetUdpSize(); if(Len>0){ m_ServerRs.GetRecvFromAddr(FromAddr,&FromPort); OnReceive(Len,FromAddr,FromPort); } else{ OnError(-2); } } else if(Sw==0){ OnTimeOut(MSec); } else{ OnError(-1); } } }int VUdpService::SelectReceive(int MSec){ int Len=-1; if(m_bRunning){ int Sw = m_ServerRs.SelectWait(MSec); if(Sw==FD_READ){ int Len = m_ServerRs.GetUdpSize(); if(Len<=0){ Len=-2; } } else if(Sw==0){ Len = 0; } else{ Len=-1; } } return Len;}void VUdpService::OnReceive(int DataSize,const char* FromAddr,int FromPort){ }void VUdpService::OnTimeOut(int MSec){ }void VUdpService::OnError(int ErrorCode){}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -