当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
服务器端登陆机制的实现模块
发布时间:2010/5/12 11:51:53 来源:城市学习网 编辑:ziteng
  #include<头文件省略>
  ——核心begin
  class CSocket32;//CSocket32  &m_socka实现套接字的引用
  class CLogin
  {
  public:
  CLogin(CSocket32& socka);//引用必须初始化
  virtual ~CLogin();
  inline string &GetUser() {return m_szUser;}//获取 用户名
  inline string &GetPath() {return m_szPath;}//获取 可访问目录
  inline BOOL IsLoged(){return m_bLogin;}//获取登陆状态
  BOOL Login(LPCSTR sKey,string& str);//登陆操作
  private:
  BOOL USER(string &str);//核对--用户名
  BOOL PASS(string &str);    //核对--密码
  private:
  BOOL m_bLogin;  //登陆状态
  string m_szUser;//用户名
  string m_szPass;//密码
  string m_szPath;//可访问的目录
  CSocket32  &m_socka;//套接字引用
  };
  ——核心end实现部分
  ——核心begin
  //异常类
  class CError
  {
  const char* m_pError;
  public:
  CError(const char* p)
  {
  m_pError = p;
  }
  const char* what(){return m_pError;}
  };
  //构造初始
  CLogin::CLogin(CSocket32& socka):m_socka(socka),m_bLogin(FALSE)
  {
  //socka的初始化。*必须*
  }
  CLogin::~CLogin()
  {
  } [NextPage]   /**//******************************************
*******************/
  //1. 登陆操作
  BOOL CLogin::Login(LPCSTR sKey,string &str)
  {
  if(m_bLogin)return TRUE;
  try
  {
  if(!strcmp(sKey,"USER"))//用户名正确
  if(USER(str))return TRUE;
  if(!strcmp(sKey,"PASS"))//密码正确
  if(PASS(str))return TRUE;
  }catch(CError &e)//异常返回
  {
  str = "530 Login incorrect for " + string(e.what()) + "." + CRLF;
  m_socka.Send(str.c_str(),str.length());
  }
  return FALSE;
  }
  //2. 核对用户名 key=user
  BOOL CLogin::USER(string &str)
  {
  char s[256];
  strcpy(s,str.c_str());
  strupr(s);
  if(!theApp.m_map.count(s))//搜索S在map的个数
  {
  throw CError("username");
  }
  m_szUser = s;
  str = "331 Password required for "+str+"." + CRLF;
  m_socka.Send(str.c_str(),str.length());//用户名无误,返回索取密码消息
  return TRUE;
  }
  //3. 核对密码 value.pass
  BOOL CLogin::PASS(string &str)
  {
  if(theApp.m_map[m_szUser].szPass != str)
  {
  throw CError("password");
  }
  m_bLogin = TRUE;
  m_szPass = str;
  m_szPath = theApp.m_map[m_szUser].szPath;//密码无误,获取可访目录
  str = "230 User "+m_szUser +" logged in , proceed." +CRLF;
  m_socka.Send(str.c_str(),str.length());
  return TRUE;
  }
  ——核心end
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved