#include "StdAfx.h" #include "MBThreadCheckServer.h" #include "MBBaseSvrInfo.h" BOOL EstablishConnection(CString strExterFServer, u_short nPort) { // Create a stream socket SOCKET sd = socket(AF_INET, SOCK_STREAM, 0); if (sd != INVALID_SOCKET) { struct sockaddr_in sockaddr; LPSTR pDest ; memset( &sockaddr, 0, sizeof(sockaddr)); if ( !CStrFileUtils::CStringToAnsi(strExterFServer, &pDest)) { return FALSE; } memset(&sockaddr, 0, sizeof(sockaddr)); sockaddr.sin_addr.s_addr = inet_addr( pDest ); sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(nPort); if (::connect(sd, (struct sockaddr*)&sockaddr, sizeof(sockaddr_in)) == SOCKET_ERROR) { ::closesocket(sd); return FALSE; } ::closesocket(sd); return TRUE; } return FALSE; } CMBThreadCheckServer::CMBThreadCheckServer(void) { m_bStop = false; m_asUserIP.RemoveAll(); m_pSvrInfo = NULL; } CMBThreadCheckServer::~CMBThreadCheckServer(void) { } void CMBThreadCheckServer::SetLoginUserIPInfo( CStringArray asUserIP, CString strUserConnIP, CString strOrgServer) { asUserIP.RemoveAll(); asUserIP.Copy(asUserIP); m_strUserConnIP = strUserConnIP; m_strOrgServer= strOrgServer; } // ¿ªÊ¼Ïß³Ì void CMBThreadCheckServer::StartThread() { if(IsRunning()) return; BeginThread(); } // ½áÊøÏß³Ì void CMBThreadCheckServer::OverThread() { m_bStop = true; if(!IsRunning()) return; EndThread(); } UINT CMBThreadCheckServer::Run() { try { if ( m_pSvrInfo ) { CheckFileServerValid(m_pSvrInfo->m_strExterIP,_tstol(m_pSvrInfo->m_strExterPort),m_pSvrInfo->m_strInterIP,_tstol(m_pSvrInfo->m_strInterPort)); } } catch(...) { } return 0; } BOOL CMBThreadCheckServer::CheckFileServerValid(CString strExterFServer, UINT nExterFSPort,CString strInterFServer, UINT nInterFSPort) { int nPos; CString strOrgSubIp1 = _T(""); CString strOrgSubIp2= _T(""); CString strConnSubIp1= _T(""); CString strConnSubIp2= _T(""); CString strTempOrgSubIp; CString strTempConnSubIp; CString strUserIP; BOOL bInExIPSame = FALSE; for(int i=0; i< m_asUserIP.GetCount();i++) { strUserIP = m_asUserIP.GetAt(i); if(strUserIP == m_strUserConnIP) { bInExIPSame = TRUE; break; } } if( bInExIPSame ) { if( EstablishConnection(strInterFServer,nInterFSPort)) { SetValidSvrInfo(strInterFServer, nInterFSPort ); } else { SetValidSvrInfo(strExterFServer, nExterFSPort ); } return TRUE; } nPos = m_strOrgServer.Find(_T(".")); if(nPos > 0 ) { strOrgSubIp1 = m_strOrgServer.Left(nPos); strTempOrgSubIp = m_strOrgServer.Mid(nPos + 1); nPos = strTempOrgSubIp.Find(_T(".")); if(nPos > 0 ) strOrgSubIp2 = strTempOrgSubIp.Left(nPos); } nPos = m_strUserConnIP.Find(_T(".")); if(nPos > 0 ) { strConnSubIp1 = m_strUserConnIP.Left(nPos); strTempConnSubIp = m_strUserConnIP.Mid(nPos + 1); nPos = strTempConnSubIp.Find(_T(".")); if(nPos > 0 ) strConnSubIp2 = strTempConnSubIp.Left(nPos); } if(strConnSubIp1 == strOrgSubIp1 && strConnSubIp2 == strOrgSubIp2 ) { if( EstablishConnection(strInterFServer,nInterFSPort)) { SetValidSvrInfo(strInterFServer, nInterFSPort ); } else { SetValidSvrInfo(strExterFServer, nExterFSPort ); } } else { if( EstablishConnection(strExterFServer,nExterFSPort)) { SetValidSvrInfo(strExterFServer, nExterFSPort ); } else { SetValidSvrInfo(strInterFServer, nInterFSPort ); } } return TRUE; } void CMBThreadCheckServer::SetValidSvrInfo( CString strSvrIP, int nSvrPort) { if ( m_pSvrInfo ) { CString strPort; strPort.Format(_T("%d"),nSvrPort); m_pSvrInfo->SetValidSvrInfo(strSvrIP,strPort); } }