《网络应用程序设计》课程设计报告书
更新时间:2024-01-09 12:34: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 课程设计期间的主要收获:
在课程设计过程中,收获知识,提高能力的同时,我也学会了很多人生的哲理,懂得怎么样区制定计划,怎样去实现这个计划,并掌握了在执行过程中怎么样区克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前。
以后我还是需要多多的练习,这样才有可能让自己有信心,有动力,让自己不至于懂得太少而怯场,因为不懂而不会做。
正在阅读:
《网络应用程序设计》课程设计报告书01-09
2021年年度下学期幼儿园大班班务计划05-15
2012小升初622民校联考信息大汇集08-12
植物生理学思考题06-03
实验报告自我介绍工作范文05-06
简爱10-28
简易购货合同范本03-25
2022年山东大学威海校区814新闻传播实务之新闻评论教程考研强化04-17
爱玩拼装的我作文400字07-05
数电实验书07-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 报告书
- 网络应用
- 程序设计
- 课程
- 设计
- 2013年昆明经济技术开发区公开选调及招聘教师综合成绩及拟进入考核人选公示 - 图文
- 京公务员考试申论答题技巧:申论冲刺如何摆脱茫然1
- 全程训练2018届高考英语一轮总复习周周测一阅读理解专练1细节理解题
- 2016-2022年中国自助餐市场深度分析与前景展望研究报告 - 图文
- 2012年西安电子科技大学硕士研究生招生简章(v1.0)
- 传统节日活动实施方案
- 高聚物合成工艺学 - 绪论
- 中职 哲学与人生 第十二课 理想信念与意志责任
- Myeclipse常用快捷键及自定义
- photoshop预赛试题第六届 - 图文
- 企业如何提升员工的忠诚度
- 有效教学理论学习心得
- 教师招聘面试指导:结构化面试之逻辑思维
- 物理化学沈文霞课后习题答案
- 小学美术人美版三年级教案
- 关于开展天津大学2015—2016学年回访母校寒假社会实践活动的通知
- 13.《目标》讲师手册(2014版)
- 大庆农村商业银行安全保卫内控评价考核管路办法 安全保卫部
- 教育学复习题
- 双色球历史开奖号码(03001—14107)