检测服务器端口

检测服务器端口

 头文件


/*----------------------------------------*/
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)
{
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值