今天喝酒了

来源:互联网 发布:水质数据监控中心平台 编辑:程序博客网 时间:2024/04/27 17:18

今天喝酒了

喝得有点小醉,还好能分清楚东南西北,不然都回不来了!!!

喝了晚上睡不着,真是很不爽,干脆起来把那个程序给写完!

于是我把那类QQ项目中的那个存放在线用户的SOCKET类给写完了,还没有调试

具体的调试还等初始化SOCKET后再来调试了

本结构采用来链表动态填加和删除SOCKET

由于头比较晕 ,代码写得很不完善,写这个BLOG的时候忘记了错误处理了,申请空间失败的情况也没有处理

现在本人还是晕晕状态!难受!!下次在也不喝酒了!!

class SocketOnlineNode

{

public:

       friend COnlineSocketChian;//设置为友员

private:

       SocketOnlineNode* m_Next;//指向下一个节点

       long m_bID;//ID 号码

       SOCKET m_ClientSocket;//保留对方的socket

};

class COnlineSocketChian

{

public:

       COnlineSocketChian();

    ~ COnlineSocketChian();

       BOOL    AddSocket(long,SOCKET);//用户登陆时保存其SOCKET

       SOCKET  FindSocket(long);//更具ID查找其SOCKET

       BOOL    DeleteSocket(long);//用户下线删去其SOCKET

private:

       SocketOnlineNode* m_FirstNode;//指向第一个节点的指针

};

//////=============构造函数==================================

//创建一个头指针和头结点

COnlineSocketChian::COnlineSocketChian()

{

       m_FirstNode=new SocketOnlineNode;

       m_FirstNode->m_Next=NULL;

}

/////////////======在最后一个元素后面追加新上线的客户IDSOCKET====================

BOOL COnlineSocketChian::AddSocket(long bID,SOCKET ClientSocket)

{

       SocketOnlineNode* CurrentNode=m_FirstNode;

       while(CurrentNode)

              CurrentNode=CurrentNode->m_Next;

       SocketOnlineNode* AddNode=new SocketOnlineNode;//创建要插入的节点

       AddNode->m_Next=NULL;

       AddNode->m_bID=bID;

       AddNode->m_ClientSocket=ClientSocket;

       m_FirstNode->m_Next=AddNode;

}

 

//===============查找SOCKET======================

SOCKET COnlineSocketChian::FindSocket(long ID)

{

       SocketOnlineNode* CurrentNode=m_FirstNode;

       while(CurrentNode)

       {

              if(ID==CurrentNode->m_bID)

                     return CurrentNode->m_ClientSocket;

        CurrentNode=CurrentNode->m_Next;

       }

       return 0;

}

 

///=========删除下线用户的SOCKET=====================

BOOL COnlineSocketChian::DeleteSocket(long ID)

{

  SocketOnlineNode* CurrentNode=m_FirstNode;

  while(CurrentNode)

  {

         if(ID==CurrentNode->m_bID)//删除操作

         {

              SocketOnlineNode* DeletNode;

              DeletNode=CurrentNode;

              CurrentNode=CurrentNode->m_Next;

              delete DeletNode;

          return TRUE; 

         }

         CurrentNode=CurrentNode->m_Next;

  }

  return FALSE;

}

 

//============析构函数===================================

~ COnlineSocketChian()

{

       SocketOnlineNode* CurrentNode=m_FirstNode;

    while(CurrentNode)

       {

     CurrentNode=m_FirstNode->m_Next;

        delete m_FirstNode;

        m_FirstNode=CurrentNode;

       }

}