课程设计简易聊天程序设计

  • 格式:docx
  • 大小:264.81 KB
  • 文档页数:26

下载文档原格式

  / 26
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}