关键词:
1网络聊天室项目描写叙述
1.1功能描写叙述
MyQQv1採用C/S模式,构建网络聊天室,详细实现功能:
A.能显示在线用户列表
B.能在聊天室里进行群聊天
C.能指定用户进行私聊
D.某用户下线。其它用户能接到提示
1.2所需技术
MFC,Socket套接字,TCP/IP协议。动态数组,CString字符串拼接与拆分
2网络聊天室执行流程图
2.1server执行流程图
2.2client执行流程图
3网络聊天室具体
3.1通信格式
每次client与server之间的通信都是发送“START&命令&自己名字&消息&私密者&END”(为标准格式字符串)的字符串,然后接受方会进行切割和依照“&”进行分段解析。
3.1.1消息切割
当某次(在接受所有在线用户列表时)次接受不止一条格式字符串时。把整个字符串分割成若干个标准格式字符串。程序清单例如以下所看到的。
/******************************************************************** 函数名称:MsgCut 函数功能:把数据流按通信格式切割处理 传入參数:CString strText 返回值: 无 ********************************************************************/ void CClientSocket::MsgCut(CString strText) { UINT nfirst , nlast; CString strTmp; while(strText.GetLength() > 9) { nfirst = strText.Find("START"); nlast = strText.Find("END"); strTmp = strText.Mid(nfirst, nlast+3);//每次截取从START到END的字符串 char * sTran = strTmp.GetBuffer(0);//CString转化为char *型 MsgDeal(sTran); strText = strText.Mid(nlast+3,strText.GetLength()-nlast-3); } }
nfirst得到“START”子串的起始位置,nlast得到“END”子串的起始位置,strTmp为“START”開始到“END”(包含末尾D)的一个标准格式字符串。再把原始长串切掉刚形成的strTmp,strText使用Mid(上一个EDN位置+3,总长度-上一个EDN位置-3)函数得到分割完的字符串,直到strText满足最小标准长度。
3.1.2按“&”分段解析
每一个标准格式字符串中包括命令,发来username,消息,私密者4个信息。
它们依照“&”连接在一起,接收端要按“&”分段解析,程序清单例如以下。
/*********************************************************************** 函数名称:MsgExplain 函数功能:对消息的拆解,消息传来的格式是 k&1&username&说的话&私密的人 传入參数:char sMsgDeal[5][BUFMAX],char * sMsgInit 返回值: 无 ***********************************************************************/ void CClientSocket::MsgExplain(char sMsgDeal[6][BUFMAX],char * sMsgInit) { char *p; bool bFlg = FALSE; int iRow = -1; int iCol = 0; char c = 0; p=sMsgInit; while (*p != '