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

📄 vudpservice.cpp

📁 otl简单包装实现类,对数据库进行操作的,简单易用.
💻 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 + -