今天喝酒了
喝得有点小醉,还好能分清楚东南西北,不然都回不来了!!!
喝了晚上睡不着,真是很不爽,干脆起来把那个程序给写完!
于是我把那类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;
}
/======在最后一个元素后面追加新上线的客户ID和SOCKET====================
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;
}
}