服务器:
接受到消息然后然后广播给所有的用户
定义一个结构保存所有的在线SOCKET
采用UDP通信
转发所有消息并显示于其它的客户端中
客户端下线或断开连接发送消息给服务器端,服务器删除其SOCKET
定义一下数据包结构
struct MessageData //数据包的结构
{
int iMessageType;
char szNickName[11];
char szRecvBuffer[512];
}*RecvBuffer; iMessageType==0表示下线删除其Socket节点,
iMessageType==1表示上线 在SOCKET库中追加新SOCKET
iMessageType==2 表示修改昵称,根据其SOCKET修改昵称
iMessageType==3的时候刷新在线列表,返回昵称给该客户端
iMessageType==4表示群发消息 遍历整个链表
保存在线SOCKET和昵称的结构
class SocketOnlineNode
{
public:
friend COnlineSocketChain;//设置为友员
private:
SocketOnlineNode* m_Next;//指向下一个节点
char m_szNickName[11];//客户端的昵称
SOCKET m_ClientSocket;//保留对方的socket
};
class COnlineSocketChain
{
public:
COnlineSocketChain();
~ COnlineSocketChain();
BOOL AddSocket(char*,SOCKET);//用户登陆时保存其SOCKET
char* FindSocket(SOCKET);//更具ID查找其SOCKET
BOOL DeleteSocket(SOCKET);//用户下线删去其SOCKET
private:
SocketOnlineNode* m_FirstNode;//指向第一个节点的指针
};