《网络应用程序设计》课程设计报告书
更新时间:2024-03-26 08:51:01 阅读量: 综合文库 文档下载
计算机应用技术系课程设计报告书
网络应用程序设计课程设计报告书
题目: 局域网多人聊天室 班级: 0991132 学号: 1099113202 姓名: 赵燃 指导教师: 宋毅、王家宁、徐红梅、姚璐 周期: 一 周 成绩:
2011年12 月23 日
计算机应用技术系课程设计报告书
一、课程设计的目的与要求(
(一)课程设计目的与任务 (1)课程设计的目的:《网络高级程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用vc++语言进行面向对象设计的基本方法。提高运用面向对象知识分析实际问题、解决实际问题的能力。
(2)课程设计任务:局域网多人聊天室
该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。 客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。
服务器端程序:可将消息发送到客户端和接受客户端发送来的消息。 (二)题目要求
该系统要求完成聊天室的全过程,包括客户端和服务器两大部分的编程及其连接。服务器端聊天程序负责接收和发送来自客户端的聊天信息,客户端聊天程序负责建立和维护与服务器端的连接,想服务器发送本客户的聊天内容。系统采用VISUAL C++语言程序设计编程实现。并且按要求编写程序设计报告书,能正确编写分析、设计、编码、测试等技术文档。 二、设计正文 1 系统分析
(1) 服务器聊天程序要在待定的端口上等待来自聊天客户的连接请求,并且需要维护一个客户连接表,以记录所有成功的连接。
(2) 服务器聊天程序要及时接受从各个聊天客户发送过来的信息,然后把这些
信息转发到一个或多个客户连接。对于公共聊天室,服务器将把接受到的信息除源端外的所有客户发送过去。 (3) 服务器还要监控这些连接的状态。在客户主动离开或发生故障时从列表删除相应的表项,并及时更新连接表。
2 功能详细描述及框图
用户首先启动客户端,登陆服务器并向服务器发送信息,启动服务器,服务器等待客户要求并向客户反馈在线用户信息,用户向服务器发送信息,服务器处理用户的数据,然后用户开始聊天,客户端的聊天分为对群聊天和私聊的信息,该信息应通过程序控制分别进行处理。
计算机应用技术系课程设计报告书
3、主要功能逻辑过程和实现算法 (1)客户端是实现的主要算法: BOOL CMy13202Dlg::OnInitDialog() {
CDialog::OnInitDialog(); login dlg;
int nResponse=dlg.DoModal(); if (nResponse == IDOK)
{ unsigned long ulAddress;
SOCKADDR_IN sin;
ulAddress=inet_addr(dlg.m_ip);//字符型服务器地址 m_name=dlg.m_name; //连接服务器
sockServer=socket(AF_INET,SOCK_STREAM,0); sin.sin_family=AF_INET; sin.sin_addr.s_addr=ulAddress;
sin.sin_port=htons(4009);
int nConnect=connect(sockServer, (LPSOCKADDR)&sin, sizeof(struct // 通知套接口有请求事件发生
WSAAsyncSelect(sockServer,m_hWnd,WM_SOCKET_READ,FD_READ); if(nConnect== -1)
sockaddr));
计算机应用技术系课程设计报告书
{
MessageBox(\连接过程发生错误!\\n请确保IP输入正确无误!\,NULL,MB_OK); CDialog::OnCancel(); }
else {
MessageBox(\与服务器建立连接成功!\,NULL,MB_OK); info myinfo; myinfo.type=0; LPCTSTR p=m_name;
memcpy(myinfo.name,p,m_name.GetLength()+1); int
nCharSend=send(sockServer,(char*)&myinfo,sizeof(myinfo),0); if(nCharSend==SOCKET_ERROR)
}
}
MessageBox(\发送过程中发生一个错误!\,NULL,MB_OK);
if (nResponse == IDCANCEL) { CDialog::OnCancel(); }
// 将“关于...”菜单项添加到系统菜单中 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { }
pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作
计算机应用技术系课程设计报告书
SetIcon(m_hIcon, TRUE);
// 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
HBITMAP hBitmap=(HBITMAP)Bitmap.Detach(); CButton *pButton=(CButton*)GetDlgItem(IDCANCEL); pButton->SetBitmap(hBitmap); return TRUE; // 除非将焦点设置到控件,否则返回TRUE }
void CMy13202Dlg::OnSysCommand(UINT nID, LPARAM lParam) {
if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout;
dlgAbout.DoModal();}
else
{ CDialog::OnSysCommand(nID, lParam);}
}
void CMy13202Dlg::OnOK() {
/ TODO: 在此添加专用代码和/或调用基类 CTime t=CTime::GetCurrentTime(); CString strTime=\; strTime=t.Format(strTime); UpdateData();
info sendinfo;
//给XX发送信息
m_list.GetLBText(m_list.GetCurSel(),toname); if(toname==\群聊天\) //发送公共信息
{ sendinfo.type=1; m_read=m_read+\+strTime+\你群说:\+m_send+\;
m_send=strTime+m_name+\对群说:\+m_send+\;
} else
{ sendinfo.type=2; //给某人发信息
LPCTSTR q=toname;
memcpy(sendinfo.name,q,toname.GetLength()+1); m_read=m_read+\+strTime+\你对\+toname+\说:
计算机应用技术系课程设计报告书
\+m_send+\;
m_send=strTime+m_name+\对你说:\+m_send+\; } LPCTSTR s=m_send; memcpy(sendinfo.msg,s,m_send.GetLength()+1);
//发送信息
int nCharSend=send(sockServer,(char*)&sendinfo,sizeof(sendinfo),0); }
服务器端实现的主要算法:
LRESULT CMy13202ServerDlg::OnServerreadorclose(WPARAM wParam, LPARAM lParam) {
if (WSAGETSELECTEVENT(lParam) == FD_READ) //网络数据到达事件 if(nCharSend==SOCKET_ERROR)
MessageBox(\发送过程中发生一个错误!\,NULL,MB_OK); m_send=\;
UpdateData(FALSE);
GetDlgItem(IDC_EDIT_SEND)->SetFocus();
{ CString s; int i; for(i=0;(i<20)&&(SocketAccept[i]!=wParam);i++)}
if(i==20) return 0;
int BRead; sendinfo info; BRead=recv(SocketAccept[i], (char*)&info,sizeof(info), 0); if (BRead == SOCKET_ERROR)
MessageBox(_T(\接收到一个错误信息. \)); switch(info.type) {
case 1:
int j;
for(j=0;j<20;j++) {
if(SocketAccept[j]!=INVALID_SOCKET&&j!=i) send(SocketAccept[j], (char*)&info,sizeof(info),
0);}
break;
case 2:
int k;
计算机应用技术系课程设计报告书
for(k=0;(k<20)&&(uinfo[k].username!=info.name);k++) { }
send(SocketAccept[k], (char*)&info,sizeof(info), 0); break;
case 0:
CTime t=CTime::GetCurrentTime();
CString strTime=\;
strTime=t.Format(strTime); uinfo[i].username=info.name;
s=info.name;
s=strTime+s+\进入聊天室\;
memcpy(info.msg,pq1,s.GetLength()+1); int j1;
for(j1=0;j1<20;j1++)
{if(SocketAccept[j1]!=INVALID_SOCKET)
{send(SocketAccept[j1], (char*)&info,sizeof(info), int n;
for(n=0;n<20;n++)
{ if((uinfo[n].username!=\)&&(n!=i)) {
sendinfo namelist; namelist.type=0;
LPCTSTR nlist=uinfo[n].username; CString nli; nli=\;
LPCTSTR pq1=s;
0);} }
LPCTSTR nlis=nli;
mcpy(namelist.name,nlist,uinfo[n].username.GetLength()+1);
memcpy(namelist.msg,nlis,nli.GetLength()+1); send(SocketAccept[i], (char*)&namelist,sizeof(namelist),
0); }}
m_msg=m_msg+\+strTime+\用户\+uinfo[i].username+\由ip\+uinfo[i].userip+\进入服务器\;
UpdateData(FALSE);
Break;} }
if (WSAGETSELECTEVENT(lParam) == FD_CLOSE) //客户端断开事件
{
计算机应用技术系课程设计报告书
CTime t=CTime::GetCurrentTime(); CString strTime=\; strTime=t.Format(strTime); int i;
for(i=0;(i<20)&&(SocketAccept[i]!=wParam);i++) ; closesocket(SocketAccept[i]); SocketAccept[i] = INVALID_SOCKET; sendinfo closeinfo,closeinfo1; closeinfo.type=1;
CString sc;
sc= strTime+uinfo[i].username+\退出聊天室\;
closeinfo1.type=3;
LPCTSTR pc=sc;
LPCTSTR pcname=uinfo[i].username;
memcpy(closeinfo.msg,pc,sc.GetLength()+1);
memcpy(closeinfo1.name,pcname,uinfo[i].username.GetLength()+1); int jc; for(jc=0;jc<20;jc++) { if(SocketAccept[jc]!=INVALID_SOCKET) { send(SocketAccept[jc], (char*)&closeinfo,sizeof(closeinfo), 0);
send(SocketAccept[jc],
(char*)&closeinfo1,sizeof(closeinfo1), 0);} } m_msg=m_msg+\+strTime+\用户\+uinfo[i].username+\由ip\+uinfo[i].userip+\退出服务器\;
uinfo[i].userip=\; uinfo[i].username=\; UpdateData(FALSE); } CEdit *pEdit;
pEdit=(CEdit *)GetDlgItem(IDC_EDIT1); int i=pEdit->GetLineCount(); pEdit->LineScroll(i,0);
return 0L;} 4、界面设计
首先的界面是服务器运行的界面:
计算机应用技术系课程设计报告书
5、系统测试
(1)用户赵燃进入了聊天室。如图所示:
(2)用户gg进入了聊天室,如图所示:
计算机应用技术系课程设计报告书
(3)服务器提示有两个用户进入了聊天室,如图所示:
(4)用户赵燃对用户gg发起会话:如图所示:
(5)用户gg对用户赵燃发起会话,如图所示:
计算机应用技术系课程设计报告书
(6)赵燃对群里发起会话,如图所示:
三、小组成员分工说明
(写上谁负责哪一部分,比如谁负责系统分析,谁负责系统编程、谁撰写的报告等,若是单独完成,写独立完成) 独立完成
四、课程设计总结或结论
1 课程设计过程中出现的技术难点和解决方法:
技术难点:譬如可以运行,但是就是无法出现连接的显示和状态,
解决方法:在老师和同学的帮助下,才知道是服务器端有了错误,没有设置自己的IP地址,然后对于客户端进行一番修改,才终于出现了上述的结果。虽然没有彻底的做出来,但是还是比较开心,因为自己知道了那里不足,那里不可以,可以在以后多多的做练习来充实自己。 2 课程设计期间的主要收获:
在课程设计过程中,收获知识,提高能力的同时,我也学会了很多人生的哲理,懂得怎么样区制定计划,怎样去实现这个计划,并掌握了在执行过程中怎么样区克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前。
以后我还是需要多多的练习,这样才有可能让自己有信心,有动力,让自己不至于懂得太少而怯场,因为不懂而不会做。
计算机应用技术系课程设计报告书
(6)赵燃对群里发起会话,如图所示:
三、小组成员分工说明
(写上谁负责哪一部分,比如谁负责系统分析,谁负责系统编程、谁撰写的报告等,若是单独完成,写独立完成) 独立完成
四、课程设计总结或结论
1 课程设计过程中出现的技术难点和解决方法:
技术难点:譬如可以运行,但是就是无法出现连接的显示和状态,
解决方法:在老师和同学的帮助下,才知道是服务器端有了错误,没有设置自己的IP地址,然后对于客户端进行一番修改,才终于出现了上述的结果。虽然没有彻底的做出来,但是还是比较开心,因为自己知道了那里不足,那里不可以,可以在以后多多的做练习来充实自己。 2 课程设计期间的主要收获:
在课程设计过程中,收获知识,提高能力的同时,我也学会了很多人生的哲理,懂得怎么样区制定计划,怎样去实现这个计划,并掌握了在执行过程中怎么样区克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前。
以后我还是需要多多的练习,这样才有可能让自己有信心,有动力,让自己不至于懂得太少而怯场,因为不懂而不会做。
正在阅读:
《网络应用程序设计》课程设计报告书03-26
Jack Ma Davos 马云达沃斯接受采访英文全文01-27
爱如火焰作文500字07-09
感恩妈妈作文06-27
造纸白水特性04-14
中级制冷设备维修工知识复习资料03-06
南京纬三路隧道免费吗?02-15
扬浆激浪求发展03-26
Velocity用户手册04-09
2018年度林业局产业股工作总结09-30
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 报告书
- 网络应用
- 程序设计
- 课程
- 设计
- 2015汇总纳税基础与实务网上作业答案
- 中国移动网上大学 代维 基站设备及配套 华为 L2考试题库
- 关于开展天津大学2015—2016学年回访母校寒假社会实践活动的通知
- 高职:秦汉时期社会概况和文化(第一节、第二节)教案 - 图文
- 企业如何提升员工的忠诚度
- 高中同步外研版必修5习题:Module6Section知能演练轻松闯关
- 宁波市中学音乐教师合唱指挥能力提高班实施方案
- 关于企业国有产权无偿划转涉及的税费问题的意见
- 文华南路监理旁站方案
- TSG T7029-2005 扶梯或人行道控制屏型式试验细则 - 图文
- Myeclipse常用快捷键及自定义
- 农业银行招聘考试会计学专项练习(一)
- 操作系统高校考研题汇总
- 双色球历史开奖号码(03001—14107)
- 生物 必修3 第2章单元测试试题1
- 2009年度驻马店市社会科学优秀成果评奖结果
- 电气设备预防性试验合同范本
- 大朗镇毛织产业集群建设工作方案2009年—2020年
- 有效教学理论学习心得
- 0410(最终定稿)合肥市轨道交通1号线一、二期工程土建施工监理1