网络聊天系统实验报告Word格式.docx
- 文档编号:7333102
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:21
- 大小:1.06MB
网络聊天系统实验报告Word格式.docx
《网络聊天系统实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《网络聊天系统实验报告Word格式.docx(21页珍藏版)》请在冰点文库上搜索。
按钮控件,如果要发送消息就单击这个按钮。
制作信息:
关于本人的信息。
如图示:
在往下就是状态栏:
从左到到右依次是:
状态,在线人数,本人相关信息。
(2)分界面截图及介绍
①、菜单栏和工具栏
(注:
以下的菜单均有快捷键,可看截图来记住)
菜单栏:
开始
这个菜单有三个子菜单,其功能分别是:
创建服务器:
创建一个服务器,用于接听客户端的连接信息。
连接服务器:
连接服务器,如果成功就可以发送和接收服务器的消息,进行聊天。
复制:
复制聊天聊天的内容。
结束
这个菜单有三个子菜单,其功能分别是:
关闭服务器:
这一项只有在建立了服务器后才有效,用于关闭服务器。
退出聊天室:
这一项只有你是当客户端连接了一个服务器后才有效,用于断开与服务器的连接。
关闭程序:
退出这个程序。
设置
这个菜单有5个子菜单,其功能分别是:
清屏:
清楚所有显示的聊天内容,还你一个空白的区域。
改名:
可以更改你的昵称,而不用退出程序或断开重连。
屏蔽一个人:
如果有一个人实在讨厌,你不愿意见到他或她发的任何消息和内容,那么你可以用这个功能把他或她屏蔽了,你将见不到他或她发的任何消息和内容。
保存聊天记录:
如果你觉的聊天内容有价值,你可以用这个功能保存下来。
载入聊天记录:
如果你想看看以前的聊天记录,你可以用这个功能把以前的记录载入到显示屏。
文件
这个菜单有一个子菜单,其功能是:
传输文件:
如果你有文件要发给好友,那么你可以有这个功能来实现。
查看
这个菜单有两个子菜单,其功能是:
工具栏:
选择后工具栏消失,如再选择则重新出现。
状态栏:
选择后状态栏消失,如再选择则重新出现。
帮助
这个菜单有一个子菜单,其功能是:
关于Chat:
选择后跳出一个对话框,显示关于本软件的一些信息。
工具栏:
创建服务器
与菜单栏的开始—创建服务器相联系。
连接服务器
与菜单栏的开始—连接服务器相联系。
关闭服务器
与菜单栏的结束—关闭服务器相联系。
退出服务器
与菜单栏的结束—退出服务器相联系。
复制
与菜单栏的开始—复制相联系。
传输文件
与菜单栏的文件—传输文件相联系。
关于
与菜单栏的关于—关于Chat相联系。
②、创建服务器界面
单击创建服务器跳出的对话框:
可以输入昵称、端口号,也可以选择头像。
创建客户端界面
单击连接服务器跳出的对话框:
可以输入昵称、你要连接的服务器的IP、服务器的端口号、你要选择的头像。
更改昵称界面
单击改名菜单跳出的对话框:
输入新昵称按确定便可以实现功能。
保存聊天记录界面
单击保存聊天记录跳出的对话框:
可以输入你自己想要的名字保存为txt文件。
载入聊天记录界面
单击载入聊天记录跳出的对话框:
可以输入你自己想要找的名字载入txt文件。
传输文件界面
单击传输文件跳出的对话框:
可以单击选择文件,来选择一个文件传输。
接受文件界面
如果有文件传输过来自动跳出的对话框:
可以单击接受文件,来选择一个地方保存传输过来的文件。
关于Chat界面
单击菜单关于Chat跳出的对话框:
显示版本信息,制作信息,和一些说明。
③、用户操作界面及介绍
选择要聊天或发送信息文件的对象
选择聊天时要用文字表达的动作
悄悄话:
选择秘密聊天,不让别人看见
选择聊天时所要发送的图片
表情。
文字输入框:
输入你要说的话。
显示马上要发送的图片表情。
发送你要说的话和做的表情按这个按钮。
本人的相关信息
2.创作过程
在一开始时我觉的聊天系统很简单,准备把它和五字棋结合起来。
所以我的设计方案就是在可能的情况下结合五子棋和聊天系统。
开始制作后,我选择的是用对话框作为主界面。
可是随着制作的深入和了解到的知识越来越多,我感觉到结合五子棋和聊天系统,只会使两个程序都处于低级状态,无法提高,所以我决定专攻聊天系统。
当我的聊天系统成型后,我发现用对话框做的聊天室很难在有提高和升级的潜力。
为了得到更多的锻炼,我毅然放弃了已成型的对话框聊天系统,开始向单文档的视图界面进发。
经过几个不眠不休的夜晚,我终于做出了现在的这个程序。
它还有很多发展潜力,可是由于时间的原因,我只能把最重要的功能完成了。
其他功能是不一定必须的,可是可以扩展,这是本程序的特点之一。
3.本程序的优点
(1)界面优美
(2)使用方便
(3)运行快速
(4)功能多样
以下是本人的得意代码:
1.这一段代码实现了本程序窗口分割,使本程序的几个“视“显示的恰到好处。
BOOLCMainFrame:
:
OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext)
{
RECTwndRect;
GetDesktopWindow()->
GetWindowRect(&
wndRect);
if(m_wndSplitter1.CreateStatic(this,2,1)==NULL)returnFALSE;
m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CBottomView),CSize(0,0),pContext);
if(m_wndSplitter2.CreateStatic(&
m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,0))==NULL)returnFALSE;
m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CRightView),CSize(0,0),pContext);
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CChatView),CSize(wndRect.right-150,0),pContext);
m_wndSplitter1.SetRowInfo(0,wndRect.bottom-230,0);
SetActiveView((CBottomView*)m_wndSplitter1.GetPane(1,0));
returnTRUE;
}
2.这一段是聊天系统中最常用的一种消息传送函数,版本很多,不过我仍然觉的我写的这个函数很好,毕竟我的消息发送都靠它的。
voidCMsg:
Serialize(CArchive&
ar)
if(ar.IsStoring())
{
ar<
<
command;
m_strFrom;
m_strTo;
m_strSay;
m_IP;
m_strFace;
m_strHead;
oneface;
}
else
ar>
>
m_strUserList.Serialize(ar);
m_strHeadList.Serialize(ar);
3.这一段代码我在对话框上加载了超过30张的位图,还不错的函数。
voidCBottomView:
OnInitialUpdate()
GetDlgItem(IDC_EDIT_MSG)->
SetFocus();
CFormView:
OnInitialUpdate();
m_cmbObject.SetCurSel(0);
m_cmbFace.SetCurSel(0);
//
CBitmapbitmap;
bitmap.LoadBitmap(IDB_SEND);
HBITMAPhbitmap=(HBITMAP)bitmap.Detach();
CButton*pbutton=(CButton*)GetDlgItem(ID_FASONG);
pbutton->
SetBitmap(hbitmap);
bitmap.LoadBitmap(IDB_WU);
hbitmap=(HBITMAP)bitmap.Detach();
pbutton=(CButton*)GetDlgItem(IDC_ONLYFACE);
pbutton=(CButton*)GetDlgItem(IDC_WUFACE);
inti;
bfacetemp=-1;
for(i=0;
i<
26;
i++)
CBitmapbitmap;
bitmap.LoadBitmap(IDB_BITMAP1+i);
HBITMAPhbitmap=(HBITMAP)bitmap.Detach();
CButton*pbutton=(CButton*)GetDlgItem(IDC_BUTTON1+i);
pbutton->
4.这段代码使我可以设置RichEdit上显示文字的颜色,我觉的很有用。
voidCAutoRich:
SeletColor(COLORREFclr)
CHARFORMATcf=GetCharFormat();
if(cf.dwEffects&
CFE_AUTOCOLOR)cf.dwEffects-=CFE_AUTOCOLOR;
cf.crTextColor=clr;
cf.dwMask=CFM_COLOR;
SetSelectionCharFormat(cf);
5.以下四个函数虽然简单,可是功能却是大的可怕,没有他们程序动不了。
SetDialogBkColor(RGB(157,199,253),RGB(255,255,255));
//设置对话框的背景和字的颜色。
CoInitialize(NULL);
//在RichEdit中加载位图是必须的函数
CoUninitialize();
//上个函数的释放函数
AfxInitRichEdit();
//显示带有RichEdit的对话框必须的函数
6.实现对话框上定义字的背景色和字的颜色
voidCTransparent:
OnPaint()
CPaintDCdc(this);
//devicecontextforpainting
CRectrect;
GetClientRect(rect);
CStringstr;
GetWindowText(str);
CFont*font,*oldfont;
font=GetFont();
oldfont=dc.SelectObject(font);
dc.SetTextColor(RGB(255,255,255));
dc.SetBkMode(TRANSPARENT);
dc.DrawText(str,rect,0);
dc.SelectObject(oldfont);
//DonotcallCStatic:
OnPaint()forpaintingmessages
7.文件结构体,个人认为很重要
structSOCKET_FILE_INFO
TCHARszTitle[MAX_PATH];
//
DWORDdwAttributes;
FILETIMECreatTime;
FILETIMELastAccessTime;
FILETIMELastWriteTime;
DWORDdwSizeHigh;
DWORDdwSizeLow;
DWORDkong;
DWORDkong2;
};
8.改变昵称,虽然难度不大,但是它写的和严紧,考虑了各个方面
voidCChatDoc:
OnChangname()
CChangeNamedlg;
if(dlg.DoModal()==IDOK)
if(!
Server&
&
!
Client)
{
DisplayMessage("
系统消息"
"
"
服务尚未启动!
USER_ERROR);
return;
}
if(dlg.m_strNewName=="
)
名字不能为空!
for(POSITIONpos=m_strUserList.GetHeadPosition();
pos!
=NULL;
if(dlg.m_strNewName==m_strUserList.GetNext(pos))
{
DisplayMessage("
这个名字已经存在!
return;
}
if(Server)
for(POSITIONpos=m_strUserList.GetHeadPosition();
POSITIONtpos=pos;
if(strFrom==m_strUserList.GetNext(pos))
{
m_strUserList.SetAt(tpos,dlg.m_strNewName);
strFrom=dlg.m_strNewName;
break;
}
msg.m_strUserList.RemoveAll();
for(POSITIONpos2=m_strUserList.GetHeadPosition();
pos2!
msg.m_strUserList.AddTail(m_strUserList.GetNext(pos2));
你已经改名!
UpdateInfo();
msg.m_strFrom="
;
msg.m_strSay="
服务器已改名为:
+strFrom;
mand=USER_CHANGENAME;
for(POSITIONpos1=m_connectList.GetHeadPosition();
pos1!
CConnectSocket*tempSocket=(CConnectSocket*)m_connectList.GetNext(pos1);
SendClientMsg(tempSocket,&
msg);
if(Client)
SendMsg(strFrom,dlg.m_strNewName,"
改变昵称!
USER_CHANGENAME);
strFrom=dlg.m_strNewName;
9.在处理结束信息上很不错,内存都释放了
OnCutfuwu()
msg.Init();
msg.m_strFrom="
msg.m_strSay="
服务器已经关闭!
mand=USER_STOP;
if(m_pServerSocket!
=NULL)
deletem_pServerSocket;
m_pServerSocket=NULL;
while(!
m_connectList.IsEmpty())
CConnectSocket*pSocket=(CConnectSocket*)m_connectList.RemoveHead();
SendClientMsg(pSocket,&
pSocket->
IsAborted())
pSocket->
ShutDown
(2);
BYTEbuffer[50];
while(pSocket->
Receive(buffer,sizeof(buffer),0)>
0);
Server=FALSE;
Client=FALSE;
m_strUserList.RemoveAll();
m_strHeadList.RemoveAll();
UpdateInfo();
DisplayMessage("
你"
已经关闭了服务器"
USER_QUIT);
10.在各个“视“的之间传替值,
voidCRightView:
OnClickList(NMHDR*pNMHDR,LRESULT*pResult)
CChatDoc*pDoc=(CChatDoc*)((CMainFrame*)AfxGetMainWnd())->
GetActiveDocument();
CBottomView*pBView=NULL;
for(POSITIONpos=pDoc->
GetFirstViewPosition();
pos;
CView*pView=pDoc->
GetNextView(pos);
if(pView->
IsKindOf(RUNTIME_CLASS(CBottomView)))
pBView=(CBottomView*)pView;
intsel=m_ListOnline.GetSelectionMark();
if(pBView!
pBView->
m_cmbObject.SetCurSel(sel+1);
*pResult=0;
4.可扩展的功能
本聊天系统还可扩展一个功能是注册功能,可是本人目前没有固定IP,所以无法长期做服务器,那注册功能也没什么用就没有做了。
因为本人打算这个程序可以免费传替和使用,而且它又是绿色软件,所以暂时不做注册功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 聊天 系统 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)