课程设计简易聊天程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
课程名称:面向对象程序设计C++
设计题目:简易聊天程序设计
专业:计算机科学与技术
姓名:金文
学号:
指导教师:李晓虹
2015 年 1 月 10 日
(一)系统需求分析
用户角度考察系统应具有哪些功能及非功能性需求。
能实现用户注册、用户的登录、各客户端能连接起来,服务器能与客户端相连
实现用户之间信息的发送与共享。
(二)总体设计
1、初始化socket,创建服务器端
2、维护一个链表,保存所有用户的IP地址、端口信息
3、接受用户传送来的聊天信息,然后向链表中的所用用户转发
4、接受用户传送来的连接判断命令,并向用户发出相应命令
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。
建立服务器
显示本机IP地址建立连
接
在另一台机器上运行聊
天程序
输入服务器IP地址
输入名字建立聊天提示连接成功或失败
进行聊天
清除聊天内容
断开连接
退出
提示连接成功
进行聊天
退出
清除聊天
关闭服务器
提示有某个服务器正在连接,是否连接
(三)详细设计
ChatClient:
运行界面:
连接服务器:
IDD_SENDDLG :
重要代码:
void CChatClientDoc::talk(int type, CString form, CString to,
CString str, COLORREF clr)
{
CChatClientView* pView = (CChatClientView*)GetView();
if(form != m_strHandle && to != m_strHandle && m_bFilter) return;
CString temp,to2,first,second;
if(type > 32 || type < 0)
return;
temp.LoadString(IDS_TALK0 + type);
int i=temp.Find(",");
if(i != -1){
first = temp.Left(i);
if(i != temp.GetLength() - 1){
second = temp.Mid(i + 1);
second += ":";
}
else{
second=":";
}
pView->TextOut((LPCTSTR)form, RGB(0,0,255));
pView->TextOut((LPCTSTR)first, RGB(0,0,0));
pView->TextOut((LPCTSTR)to, RGB(0,0,255));
pView->TextOut((LPCTSTR)second, RGB(0,0,0));
pView->TextOut((LPCTSTR)str,clr);
pView->TextOut((LPCTSTR)"\r\n",clr);
}
else{
first=temp;
second=":";
pView->TextOut(form,RGB(0,0,255));
pView->TextOut(first,RGB(0,0,0));
pView->TextOut(second,RGB(0,0,0));
pView->TextOut(str,clr);
pView->TextOut("\r\n",clr);
}
}
void CChatClientDoc::Disconnect()
{
msg.type = -2;
msg.m_bClose = TRUE;
msg.from = m_strHandle;
msg.to = "所有人";
msg.secret = FALSE;
msg.m_strText ="Hello";
msg.color = RGB(0,136,255);
SendMsg();
m_bConnected = FALSE;
msg.from = "DUMP";
GetView()->GetParent()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg.from), msg.image);
}
void CChatClientView::TextOut(LPCTSTR lpszMessage, COLORREF clr)
{
cfm.cbSize=sizeof(cfm); // CHARFORMAT cfm
cfm.crTextColor=clr;
cfm.dwMask=CFM_COLOR;
CString strTemp = lpszMessage;
int len = GetWindowTextLength();
GetRichEditCtrl().SetSel(len,len);
GetRichEditCtrl().SetSelectionCharFormat(cfm);
GetRichEditCtrl().ReplaceSel(strTemp);
}
void CChatSocket::OnReceive(int nErrorCode)
{
CSocket::OnReceive(nErrorCode);
m_pDoc->ProcessPendingRead();
}
void CChatClientCntrItem::Dump(CDumpContext& dc) const
{
CRichEditCntrItem::Dump(dc);
}