山东建筑大学课程设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

山东建筑大学课程设计1山东建筑大学课程设计说明书(论文)题目:聊天程序的开发课程:VC++程序设计基础课程设计院(部):信息与电气工程学院专业:电子信息工程班级:学生姓名:学号:指导教师:完成日期:山东建筑大学课程设计2目录1.需求分析..............................................................22.相关知识..........................................................-3-2.1WINSOCK介绍.....................................................-3-2.2MFC类CASYNCSOCKET和CSOCKET.......................................-3-2.3利用CSOCKET进行有连接的通信....................................-4-3.详细设计..............................................错误!未定义书签。3.1客户端的实现....................................................-5-3.2服务端的实现....................................................-9-4.程序运行结果.....................................................-13-4.1服务器端.......................................................-13-4.2客户端..............................................错误!未定义书签。5.参考文献..............................................错误!未定义书签。1.需求分析当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。在网络早期就开始盛行,不论是BBS,IRC都有类似网上聊天室的机制。聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。聊天室适用于网上会议或闲聊的一些场合。聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈,在形式上有点类似笔友的性质,却大大节省了书信往返的时间,这也是网上交友之所以如此热门的原因。山东建筑大学课程设计3聊天室的设计目标本课题是建立聊天通信模型,设计一个聊天室软件,包括服务器端和客户端,主要功能为:服务器端功能:1、初始化socket,创建服务器端。2、维护一个链表,保存所有用户的IP地址、端口信息。3、接受用户传送来的聊天信息,然后向链表中的所用用户转发。4、接受用户传送来的连接判断命令,并向用户发出响应命令。客户端功能:客户端界面上的两个文本框,一个用于显示接受的聊天信息,一个用来接受用户输入的聊天信息。当按下“发送”按钮时将信息发送给服务器。通过本课题的毕业设计,可以比较深入的了解和掌握WINSOCK控件基本属性、方法和事件,理解网络聊天通信的概念,输控制协议(TCP)进行数据交流,初步掌握网络聊天通信程序的设计方法。并能巩固和扩展大学期间的学习内容,进行项目的设计开发训练,更好的适应社会的需求。2.相关知识2.1Winsock介绍WindowsSockets规范以U.C.Berkeley大学BSDUNIX中流行的Socket接口为范例定义了一套MicosoftWindows下网络编程接口。它不仅包含了人们所熟悉的BerkeleySocket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。WindowsSockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,WindowsSockets也定义了一个二进制接口(ABI),以此来保证应用WindowsSocketsAPI的应用程序能够在任何网络软件供应商的符合WindowsSockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。山东建筑大学课程设计-4-2.2MFC类CAsyncsocket和CSocket构造一个CAsyncSocket对象并使用该对象创建基础SOCKET句柄。套接字的创建遵循两阶段构造的MFC模式。例如:CAsyncSocketsock;sock.Create();//Usethedefaultparameters对于服务器套接字,必须指定端口。对于客户端套接字,通常接受此参数的默认值,该值允许WindowsSockets选择端口。套接字类型:SOCK_STREAM(默认值)或SOCK_DGRAM。套接字“地址”,如“ftp.microsoft.com”或“128.56.22.8”。该地址为网络上的网际协议(IP)地址。很可能要始终依赖此参数的默认值。如果套接字是客户端,则使用CAsyncSocket::Connect将此套接字对象连接到服务器套接字。销毁CAsyncSocket对象。如果在堆栈上创建了套接字对象,当包含函数超出范围时将调用此对象的析构函数。如果使用new运算符在堆上创建了套接字对象,则必须负责使用delete运算符销毁此对象。“阻塞”方案。发送和接收计算机之间的字节顺序差异。在Unicode和多字节字符集(MBCS)字符串之间转换。2.3利用CSocket进行有连接的通信CAsyncSocket类逐个封装了WinSockAPI,为高级网络程序员提供了更加有力而灵活的方法。这个类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS间转换字符的任务。为了提供更方便的接口以自动处理这些任务,MFC给出了CSocket类,这个类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket更高层的WinSockAPI接口。Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。CSocket对象提供阻塞模式,这对于Carchive的同步操作是至关重要的。阻塞函数(如Receive()、Send()、ReceiveFrom()、SendTo()和Accept())直到操作完成后才返回控制权。山东建筑大学课程设计-5-3.1客户端的实现(1)首先启动VisualC++6.0,利用MFCAppWizard[EXE]建立一个新的MFC工程,工程名为tcpclient,在MFCAppWizardStep1的时候选择Dialogbased即基于对话框,在Step4时勾选WindowsSockets选项(如图3.11),其他默认值下一步。图3.11MFC的设置(2)客户端主要分为三个窗口,第一个是连接窗口,需要输入连接到服务器的相关设置信息;第二个是聊天信息显示窗口,该窗口显示登录服务器以来发送和接收到的消息;第三个是消息编辑发送窗口,需要输入你要发送的信息内容并发送。(单击连接服务器按钮时的处理网络连接的函数。代码设置如下:voidCTcpclientDlg::Onconnet(){//TODO:Addyourcontrolnotificationhandlercodehereif(clconect)clconect.Close();CStringipstr,portstr;intport;GetDlgItemText(IDC_EDIT1,ipstr);GetDlgItemText(IDC_EDIT2,portstr);GetDlgItemText(IDC_EDIT5,clientname);portstr.TrimLeft();portstr.TrimRight();port=atoi(portstr);if(port0&&port9999){山东建筑大学课程设计-6-clconect.Create();//cslisten.Bind(port);if(clconect.Connect(ipstr,port)){clconect.setp(this);CWnd*cw=GetDlgItem(IDC_EDIT1);cw-EnableWindow(false);cw=GetDlgItem(IDC_EDIT2);cw-EnableWindow(false);cw=GetDlgItem(IDC_connet);cw-EnableWindow(false);cw=GetDlgItem(IDC_EDIT5);cw-EnableWindow(false);SetDlgItemText(IDC_EDIT3,已设名字+clientname+\r\n连接服务器成功);CStringenterinfo=clientname+进入聊天室;intlen=enterinfo.GetLength();clconect.Send(enterinfo,len);}else{clconect.Close();MessageBox(连接失败,请检查IP与端口是否与服务器一致!或者服务器没打开,连接错误,MB_ICONERROR);}}else{MessageBox(端口或IP输入有误,请重新输入);}}设计步骤:①创建字符串ipstr(保存IP),portstr(保存端口),clientname(用户名),整型port(端口号)。②利用GetDlgItemText将各个编辑框中的信息赋给相应的变量。③监视端口号和IP格式并设置相应错误提示(如下图)。图3.13连接错误提示山东建筑大学课程设计-7-图3.14端口或IP错误提示④创建套接字clconect,设置成功创建后相关控件为只读。⑤设置建立连接后相应提示。(5)接下来就是对话框中的发送(回车)按钮的函数,代码设置如下:voidCTcpclientDlg::Onsend(){CStringstr;GetDlgItemText(IDC_EDIT4,str);str=clientname+:+str;intlen=str.GetLength();if(clconect.Send(str,len)1)SetDlgItemText(IDC_EDIT4,);}定义字符串str用于保存输入的消息,调整格式后使用CSocket的操作函数send将消息发送到服务器。(6)要显示客户端接收到来自服务器其他用户的信息,代码设置如下:voidCTcpclientDlg::onrev(){CStringstr,str1;charss[256];for(intj=0;j256;j++)ss[j]='\0';clconect.Receive(ss,256);if(ss!=)str.Format(%s,ss);GetDlgItemText(IDC_EDIT3,str1);str=str1+\r\n+str;SetDlgItemText(IDC_EDIT3,str);CEdit*ce=((CEdit*)GetDlgItem(IDC_EDIT3));ce-LineScroll(ce-GetLineCount()-1);;}设计步骤:①创建字符串str、str1,字符数组ss。②接受来自服务器套接字的信息数据保存到ss中,调整格式后将其打印到消息区。山东建筑大学课

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功