服务器端登陆机制的 实现模块

37 篇文章 0 订阅
服务器端登陆机制的 实现模块


#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()
{


}
/*************************************************************/
//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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值