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

📄 mosocket.cpp

📁 一个手机通信的源代码 一个手机通信的源代码一个手机通信的源代码
💻 CPP
字号:
// MoSocket.cpp : implementation file
//

#include "stdafx.h"
#include "MoSocket.h"
#include "md5.h"
#include "MoThread.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMoSocket

CMoSocket::CMoSocket()
{
 m_ParentThread=NULL;


}

CMoSocket::~CMoSocket()
{
 int i,j;
 for(j=0;j<m_ProvinceClient.GetSize();j++) 
 {
  for(i=0;i<m_ProvinceClient.GetAt(j)->m_pClientArray.GetSize();i++)
  {
	  CMoClient * pClient = NULL ;
	  pClient = m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(i) ;
	  pClient->Close() ;
	  delete pClient ;
	  pClient = NULL ;
  }
  m_ProvinceClient.GetAt(j)->m_pClientArray.RemoveAll();
  StructProvinceClient * pClient = NULL ;
  pClient = m_ProvinceClient.GetAt(j) ;
  delete pClient ;
  pClient = NULL ;
 }

  
 m_ProvinceClient.RemoveAll();
 Close();
}


// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CMoSocket, CSocket)
	//{{AFX_MSG_MAP(CMoSocket)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif	// 0

/////////////////////////////////////////////////////////////////////////////
// CMoSocket member functions
//

//创建一个MoSocket
BOOL CMoSocket::CreateMoSocket(UINT LocalPort, CString csRemoteIP,CString ICPSecret, char *AuthenticatorICP)
{
  m_csRemoteIP=csRemoteIP;
  if(!Create(LocalPort))
	 return FALSE;
  if(!Listen())   //监听
     return FALSE;
  return TRUE;  
}

void CMoSocket::OnAccept(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class

	CMoClient* NewClient=new CMoClient;

	int i;
    
	if(Accept(*NewClient)) 
	{
	  //IP验证,对多个移动
	  CString csRemoteIP;
	  UINT RemotPort;
      NewClient->GetPeerName(csRemoteIP,RemotPort);
	  int j;
	  for(j=0;j<m_ParentThread->m_ProvinceNum ;j++)
	  {
		  if(csRemoteIP==m_ProvinceClient.GetAt(j)->m_csIsmgIP)
		  {
		    NewClient->m_ProvinceIndex =m_ProvinceClient.GetAt(j)->Index;
			break;	
		  }
	  }
	  if(j==m_ParentThread->m_ProvinceNum)//非法IP
	  {
		  delete NewClient;
	      CSocket::OnAccept(nErrorCode); 
		  return ;
	  }
	  //验证通过接受
	  NewClient->m_ParentThread=m_ParentThread ;
	  NewClient->m_pParentSocket=this; 
	  if(m_ProvinceClient.GetAt(j)->m_pClientArray.GetSize()>=40) //最多连接40个客户端
	  {
	   for(i=0;i<m_ProvinceClient.GetAt(j)->m_pClientArray.GetSize();i++) //
	   {
	    if(m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(i)->m_bDeleted==TRUE)
		{
		  m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(i)->Close();
		  delete m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(i);
	      m_ProvinceClient.GetAt(j)->m_pClientArray.RemoveAt(i);
		  break;
		  i--;

		}
	   }//for
       if(m_ProvinceClient.GetAt(j)->m_pClientArray.GetSize()>=40)
	   {
          m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(20)->Close();
		  delete m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(20);
	      m_ProvinceClient.GetAt(j)->m_pClientArray.RemoveAt(20);
	   }//删除中间的
	  }//if

	  int Pos=m_ProvinceClient.GetAt(j)->m_pClientArray.Add(NewClient);
	  m_ProvinceClient.GetAt(j)->m_pClientArray.GetAt(Pos)->m_PosInArray=Pos;
	}	
	else //no Accept
	{
     delete NewClient;
	}
	CSocket::OnAccept(nErrorCode);
}
//收到错包
void CMoSocket::OnReceiveWrongPackage(int Pos,int Index)
{
    m_ProvinceClient.GetAt(Index)->m_pClientArray.GetAt(Pos)->Close();
    delete m_ProvinceClient.GetAt(Index)->m_pClientArray.GetAt(Pos);
	m_ProvinceClient.GetAt(Index)->m_pClientArray.RemoveAt(Pos);
}
//初始化省份信息
void CMoSocket::InitProvince(CString IsmgIP, int Index)
{
  StructProvinceClient* NewProvince= new StructProvinceClient;
  NewProvince->m_csIsmgIP=IsmgIP; 
  NewProvince->Index=Index;
  m_ProvinceClient.Add(NewProvince);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -