检测服务器端口
头文件
/*----------------------------------------*/
class PortCheck
{
SOCKET m_socket;
SOCKADDR_IN m_dest;
int m_connectNum;
#define CHECKNUM 1
public:
PortCheck();
~PortCheck();
bool Init();
bool CheckPort(uint ip, ushort port);
};
/*----------------------------------------*/
typedef struct CheckDataQue
{
int test;
}CheckDataQue_t;
typedef struct ResDataQue
{
int test;
}ResDataQue_t;
/*
#ifdef DLL_FILE
class __declspec(dllexport) CheckMachine
#else
class __declspec(dllimport) CheckMachine
#endif
*/
class CheckMachine
{
kyPing *m_ping;
PortCheck *mort;
uint m_chkThrdNum;
static CheckMachine* m_this;
public:
uint m_interval; //time, unit is minute
// struct CheckDataQue *chkQue; //single thread
// struct ResDataQue resQue; //multi thread
public:
CheckMachine(uint chkThrdNum = 10, uint interval = 30)
{
m_chkThrdNum = chkThrdNum;
m_interval = interval * 60 * 1000;
m_this = this;
}
~CheckMachine();
void Run();
private:
static void __stdcall TimeCallPro(HWND, UINT, UINT_PTR, DWORD);
CheckDataQue_t* GetCheckData();
static void __stdcall CheckPro(void* param);
static void __stdcall WriteDBPro(void* param);
};
源文件
/*---------------------------------------------*/
PortCheck::PortCheck()
{
m_socket = 0;
m_connectNum = CHECKNUM;
}
PortCheck::~PortCheck()
{
if(m_socket)
{
closesocket(m_socket);
m_socket = 0;
}
}
bool PortCheck::Init()
{
/*
WSADATA wsaData;
if(::WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
return false;
}
*/
//tcp socket
m_socket = ::socket(AF_INET, SOCK_STREAM, 0);
if(m_socket == INVALID_SOCKET)
{
return false;
}
return true;
}
bool PortCheck::CheckPort(uint ip, ushort port)
{
memset(&m_dest, 0, sizeof(SOCKADDR_IN));
m_dest.sin_family = AF_INET;
m_dest.sin_addr.S_un.S_addr = ip; //没有进行ip检查,要确保正确
m_dest.sin_port = port;
int i = 0;
for(; i < m_connectNum; i++)
{
int status = connect(m_socket, (LPSOCKADDR)&m_dest, sizeof(SOCKADDR_IN));
if(status != SOCKET_ERROR)
{
printf("connect ip = %d port = %d success!/n", ip, port);
return true;
}
else
{
printf("%d times connect ip = %d port = %d fail!/n", i, ip, port);
}
}
return false;
}
/*---------------------------------------------*/
CheckMachine* CheckMachine::m_this = NULL;
CheckMachine::~CheckMachine()
{
WSACleanup();
}
void CheckMachine::Run()
{
WSADATA wsaData;
if(::WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
return;
}
if(NULL != ::SetTimer(NULL, NULL, m_interval, TimeCallPro))
{
return;
}
}
void __stdcall CheckMachine::TimeCallPro(HWND, UINT, UINT_PTR, DWORD)
{
//get data from database
CheckDataQue_t* chkQ = m_this->GetCheckData();
if(chkQ == NULL)
return;
DWORD thrdID;
if(NULL == CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CheckPro, &chkQ, 0, &thrdID))
{
printf("create checkmachine thread failed!/n");
return;
}
if(NULL == CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WriteDBPro, NULL, 0, &thrdID))
{
printf("create writedb thread failed!/n");
}
}
CheckDataQue* CheckMachine::GetCheckData()
{
CheckDataQue* q = NULL; //new CheckDataQue[m_chkThrdNum];
return q;
}
void __stdcall CheckMachine::CheckPro(void* param)
{
}
void __stdcall CheckMachine::WriteDBPro(void* param)
{
}