📄 qtcplistendevice.cpp
字号:
#include "QTcpListenDevice.H"
#include "../QNetBase/QNetBase.h"
using namespace N_QTcpListenDevice;
//---------------------------------------------------------------------------
IQTcpListenDevice* __stdcall IQTcpListenDevice::Create(void)
{
return new QTcpListenDevice();
}
//---------------------------------------------------------------------------
__stdcall QTcpListenDevice::QTcpListenDevice()
: m_Socket(0)
{
}
//---------------------------------------------------------------------------
__stdcall QTcpListenDevice::~QTcpListenDevice()
{
this->Stop();
}
//---------------------------------------------------------------------------
bool __stdcall QTcpListenDevice::Start(unsigned int Port)
{
if (this->IsPowerOn())
return false;
m_Socket = _QCreateSocket();
if (m_Socket <= 0)
return false;//创建socket失败
if (!_QBind(m_Socket, Port)) {
_QClose(m_Socket);
m_Socket = 0;
return false;
}
return true;
}
//---------------------------------------------------------------------------
void __stdcall QTcpListenDevice::Stop(void)
{
if (!this->IsPowerOn())
return;
_QClose(m_Socket);
m_Socket = 0;//停止
int Sock_Del = 0;//清空存放的Socket
while(this->m_SocketQueue.recv(&Sock_Del) ) {
_QClose(Sock_Del);
}
}
//---------------------------------------------------------------------------
bool __stdcall QTcpListenDevice::IsPowerOn(void)const
{
return 0 != m_Socket;
}
//---------------------------------------------------------------------------
void __stdcall QTcpListenDevice::Process(void)
{
if (!this->IsPowerOn())
return;
_QSetBlock(m_Socket, false);//非阻塞
while(_QWaitIn(m_Socket, 0)) {
if (m_SocketQueue.size() > MAX_QUEUED_SOCKET)
break;//存放太多则不再接收
int NewSock = 0;
if (!_QAccept(m_Socket,&NewSock))
break;
if (NewSock <= 0)
continue;
m_SocketQueue.send(NewSock);
}
}
//---------------------------------------------------------------------------
bool __stdcall QTcpListenDevice::GetAccepted(int* pSocketHandle)
{
return m_SocketQueue.recv(pSocketHandle);
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -