还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程设计论文任务书 学 院 专 业 班
一、课程设计论文题目 基于udp的点到点聊天程序
二、课程设计论文工作2008年6月23日起至2008年6月29日止
三、课程设计论文地点:软件机房
四、课程设计论文内容要求1.本课程设计的目的
(1)使学生掌握系统各功能模块的基本工作原理;
(2)使学生学会系统调试;
(3)培养学生分析、解决问题的能力;
(4)提高学生的软件文档写作能力2.课程设计的任务及要求1)基本要求
(1)分析系统各功能模块的工作原理;
(2)需求分析、概要设计、详细设计和调试分析、测试分析、课设心得、参考文献
(3)提出系统的设计方案;
(4)对所进行编程、调试、修改2)创新要求在基本要求达到后,可进行创新设计,如深入编程,高级编程;3)课程设计报告编写要求
(1)要按照书稿的规格打印誊写课设报告
(2)报告包括目录、绪论、正文、小结、____、附录等
(3)报告装订按学校的统一要求完成4)答辩与评分标准
(1)考勤与学习态度20分;
(2)完成原理分析和设计过程完成35分;
(3)完成调试运行结果正确30分;
(4)答辩15分5)____
(1)
(2)侯捷.《深入浅出MFC》华中科技大学出版社
(3)http://csdn.net6)课程设计进度安排内容天数 地点总体需求与分析构思及收集资料1 图书馆各模块的编程实现,调试与修改3 机房撰写论文与答辩1 图书馆、机房,学生签名08年6月29日课程设计论文评审意见
(1)考勤与学习态度(20分)优( )、良( )、中( )、一般()、差( );
(2)原理与设计分析(35分)优( )、良( )、中( )、一般( )、差( );
(3)调试与运行(30分)优( )、良( )、中( )、一般( )、差( );
(4)答辩(15分)优( )、良( )、中( )、一般( )、差( );
(5)格式规范性及考勤是否降等级是( )、否( )评阅人 职称讲师2008年6月30日目 录TOC\o1-1\h\z\u
一、需求分析
11.1winsock编程技术简介………………………………………..
11.2点到点聊天的原理及UDP协议的简介……………………….3
二、概要设计6
三、详细设计8
四、调试分析13
五、测试分析14
六、课设心得15
七、____16一需求分析在网络越来越发达的今天人们对网络的依赖越来越多越来越离不开网络由此而产生的聊天工具越来越多类似__网络聊天时一类的聊天系统的发展日新月异因此产生了制作一个类似__的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识.
1.1winsock编程技术简介目前,Inte.NET已成为世界上最大的TCP/IP网络早期的站点是unix机器,一组称为Berkeley插口的约定成为INTERNET上UNIX机器之间利用TCP/IP进行通信的标准其他操作系统也用TCP/IP进行通信,这极大地促进了INTERNET的发展windows插口 在插口编程里一个重要的概念就是一个插口的端口INTERNET上的每一个站点都有一个数字地址称为IP地址,通常是由逗号分开的四个数在机器上运行的程序可以随心所欲地用插口与其他机器进行通信 请求到达机器时携带一个端口号,一个大于1024的数,它表明此请求是给那个应用程序的 多数插口的工作是基于连接的两个程序在每一端用一个插口形成一个连接,然后沿着该连接收发数据有些应用程序倾向无连接地发送,但是这些数据的到达是没有保障的客户机/服务器模式 在TCP/IP应用中,如何采用客户机/服务器模式 客户机一方,TCP/IP应用程序功能如下 1)打开通信信道(申请一套接字),并连接到服务器在主机的保留端口,该端口对应服务器的TCP/IP进程 2)向服务器发出请求报文,等待接收应答 3)从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程 服务器一方,TCP/IP应用程序动作如下 1)打开通信信道(申请一套接字),通知本地主机在某一保留端口接收客户机请求 2)等待客户请求到达指定端口 3)接收到请求,启动一新进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路 4)继续等待客户机请求 5)如果不想响应客户机请求,关闭服务器进程 综上所述,TCP/IP应用中的服务器程序必须先于客户机进程启动,直到对客户机的响应结束或强迫终止 WINSOCK
1.1版通过异步选择机制来实现非阻塞通信方式,对于非阻塞方式,函数被调用后立即返回,当传送完成后由WINSOCK给进程发一个事先约定好的消息.WinSock是WindowsSockets的缩写,它作为Windows和TCP/IP之间的接口而我们都知道TCP/IP在互联网举足轻重的作用,如果希望了解Socket,那么BerkeleySocket不可不提,它是在UNIX下对TCP/IP进行编程的标准模式WinSock的设计和它很象,这样可以使UNIX上的应用程序在Windows平台上使用但是,两者也有一些区别,如WinSocket利用了Windows的一些特点,而这些特点对于UNIX来说是没有的WinSock是一个DLL,它运行于Windows
3.x,WindowsforWorkgroups,windowsNT和Windows95下WINSOCK.DLL是与TCP/IP的接口,通过这个接口和网络进行连接WINSOCK.DLL实际上是作为WinSock应用程序和TCP/IP协议栈之间的中间层用户的应用程序告诉WINSOCK.DLL需要做什么,WINSOCK.DLL将这些命令传送到TCP/IP协议栈,由TCP/IP协议栈传送到网络但是重要的事情是用户必须注意用户使用的WINSOCK.DLL必须和TCP/IP的版本号一致不要以后它们都叫WinSocks它们就是一样的所以,如果用户在使用microsoft的TCP/IP,就不能使用TrumpetWinsock同样,如果用户正在使用SLIP连接,而希望由ChameleonSampler的Winsock切换到TrumpetWinsock,用户必须删除Chameleon的WINSOCK.DLL,然后再__新的WINSOCK.DLL
1.2点到点聊天的原理及UDP协议的简介利用WinSock控件可以与远程计算机建立连接,并通过用户数据文报协议UDP这种可以用来创建客户与服务器应用程序与Timer控件类似,WinSock控件在运行时是不可见的用途1创建收集用户信息的客户端应用程序,并将收集的信息发送到某__服务器2创建一个服务器应用程序,作为多个用户的数据的汇入点3创建“聊天”应用程序在使用WinSock控件时,首先需要考虑使用什么协议因此我选择UDP协议UDP协议是一种无连接协议,两台计算机之间的传输类似于传递邮件消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接另外,单次传输的最大数据量取决于具体的网络协议的设置在设计时,可以按如__式设置应用程序使用的协议在“属性”窗口中单击“协议”,sckU___rotocol也可以使用程序代码来设置Protocol属性,如下所示Winsock
1.Protocol=sckTCPProtocol因为两台计算机的地位可以看成“平等的”,这种应用程序也被称为点到点的为了具体说明这个问题,下面将创建一个“聊天”应用程序,两个人可以通过它进行实时的交谈创建一个UDP伙伴1创建一个新的StandardEXE工程2将缺省的窗体的名称修改为frmPeerA3将窗体的标题修改为“PeerA”4在窗体中放入一个Winsock控件,并将其命名为u___eerA5在“属性”页上,单击“协议”并将协议修改为U___rotocol6在窗体中添加两个TextBox控件将第一个命名为___Send,第二个命名为___Output7为窗体增加如下的代码PrivateSubForm_Load控件的名字为u___eerAWithu___eerA重点:必须将RemoteHost的值修改为计算机的名字.RemoteHost=PeerB.RemotePort=1001连接的端口号.Bind1002绑定到本地的端口EndWithfrmPeerB.Show显示第二个窗体EndSubPrivateSub___Send_Change在键入文本时,立即将其发送出去u___eerA.SendData___Send.TextEndSubPrivateSubu___eerA_DataArrival_ByValbytesTotalAsLongDimstrDataAsStringu___eerA.GetDatastrData___Output.Text=strDataEndSub创建第二个UDP伙伴1在工程中添加一个标准窗体2将窗体的名字修改为frmPeerB3将窗体的标题修改为“PeerB”4在窗体中放入一个Winsoc
二、概要设计运用所学的编程知识,加上网络方面的一些知识结构,模拟__聊天工具,通过SOCKET编写的简易网络聊天工具1)聊天程序的功能及其相关网络协议
1、建立侦听服务这个需求是服务器端的需求
2、用户登录包括客户端请求登录以及服务器端响应登录两个过程
3、收发聊天信息包括客户端发送聊天信息以及服务器端转发聊天信息两个过程
4、收发系统信息由服务器端发送给客户端的信息
5、用户下线包括客户端请求下线以及服务器响应请求两个过程,这个与用户登录类似
6、服务器关闭该聊天工具采用C/S结构,在分布处理过程中,使用基于连接的网络通信模式该通信模式首先在客户机和服务器机之间定义一套通信协议,并创建一个SOCKET类,利用这个类建立一条可靠的连接;然后,客户/服务器再在这条连接上可靠地传输数据客户机发出请求,服务器监听来自客户机的请求,并为客户机提供响应服务这就是典型的“请求-应答”模式服务器端和客户端的功能说明如下服务器功能
1、启动服务,建立侦听,接受客户端连接
2、接收、分析、转发聊天消息
3、向客户端发送系统消息
4、关闭服务,并向客户端发送服务器关闭消息 客户端功能
1、连接服务器,发送用户登录请求
2、向服务器发送聊天信息
3、接收服务器转发的聊天信息
4、接收服务器发送的系统信息
5、响应服务器关闭的消息TCP/IP服务器与客户端套接字中,客户通过服务器端的IP地址和端口号来建立和服务器的连接,每个服务器套接字运行在服务器特定的端口,监听在这个端口的TCP连接当远程的客户端的Socket试图与服务器指定端口建立连接时,服务器被激活,判定客护端的连接,并打开两个主机之间固有的连接一旦客户端与服务器建立了连接,则两者之间就可以传送数据,而数据是通过这个固有套接字传递的在ServerSocket类中包含了创建ServerSocket对象的构造方法,在指定端口监听的方法,建立连接后发送和接受数据的方法服务器与客户端根据一定的网络协议交互,直到关闭连接三详细设计基于客户/服务器模型的套接字编程,服务器端和客户端的设计如下所示1)、服务器针服务器功能,设计了下面4个类
1、用户信息链表类 提供一个链表数据结构以及一组链表的操作函数,用于保存用户信息提供链表的添加、删除以及查找这3个基本功能部分功能代码如下publicclassUserInfoList{Noderoot;Nodepointer;intcount;publicUserInfoList{root=newNode;root.next=null;pointer=null;count=0;}publicvoidaddNoden//新的用户登陆,向链表中加入成员用户{……}publicvoiddelNoden//用户离开,从链表中删除该用户{……}publicintgetCount//统计当前用户的人数{……}publicNodefindStringusername//通过用户名来查找该用户的状态{……}publicNodefindintindex//通过结点来查找该用户的状态{……}}
2、服务器主框架类 提供服务器的界面,并且实现了服务器的启动和关闭以及服务器系统的消息的发送功能部分代码如下publicclassServerFrameextendsJFrame{//服务器的界面设置……publicvoidinit{BorderbevelBorder=Borde___ctory.createBevelBorderBevelBorder.RAISEDColor.whiteColor.whiteColor.whiteColor.white;……………………///////////提供服务器的界面,排版及部件pack;jbStartServer.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{startServer;}};/////////////响应__监听者……/////////////同上面的实现__}服务器的启动和关闭以及服务器系统的消息的发送publicvoidstartServer{……}publicvoidstopServer{……}publicvoidsendStopToAll{……}publicvoidsendMsgToAllStringmsg{……}publicvoidsendSystemMessage{……}
3、务器侦听线程类 负责侦听客户端连接,并实现响应用户登录的功能publicclassServerListenThreadextendsThread{ServerSocketserver;///定义SOCKET端口………………publicvoidrun{while!isStop!server.isClosed{///通过SOCKET端口进行传输的数据流及传输流/////获取函数getOutputStream和getInputStreamclient=newNode;client.socket=server.ac__pt;}}}
4、服务器接收线程类 负责接收客户端消息,并且对消息作出判断和相应的响应publicvoidrun{sendUserList;//把一个新的成员列表发给所有的用户iftype.equalsIgnoreCase聊天信息{/////获取来自客户的消息,并进行分类发送Stringmsg=client.username++action+对+toSomebody+说:++message+\n;ifstatus.equalsIgnoreCase悄悄话{msg=[悄悄话]+msg;}//分类发送客户的消息…………………………}publicvoidsendToAllStringmsg{……}//发送消息给所有的用户2)、客户考虑设计两个类
1、客户端主框架类 用户界面、用户登录与下线、发送聊天信息publicclassClientFrameextendsJFrame{Socketsocket;//定义SOCKET客户端O__ectOutputStreamoutput;//定义到服务器的输出流O__ectInputStreaminput;//定义从服务器获取数据的输入流…………publicClientFrame{…………//客户端界面的设置,排版及组件serverAddress=newJTextArea请输入服务器地址;//输入连接到服务器的IP地址login.addActionListenernewActionListener{publicvoidactionPerformedActionEvente{LogIn;}};…………………………//同上一样的时间响应}publicvoidLogIn{/////////网络数据通信try{socket=newSocketserverAddress.getText8000;//设置服务器的IP和端口号80000}catchUnknownHostEx__ptione{serverAddress.setText服务器地址不可达,请重新输入!;serverAddress.setEditabletrue;}output=newO__ectOutputStreamsocket.getOutputStream;//输出信息output.flush;input=newO__ectInputStreamsocket.getInputStream;//获取输入信息output.writeO__ecttextfield.getText;//将消息域的信息发给服务器output.flush;//刷新数据流…………}
2、客户端接收线程类 信息接收功能、响应服务器关闭消息publicvoidrun{while!socket.isClosed///判断当前的连接状态{Stringtype=Stringinput.readO__ect;//获取信息iftype.equalsIgnoreCase系统信息{……//发送系统消息}elseiftype.equalsIgnoreCase服务关闭{……//关闭与服务器的连接}elseiftype.equalsIgnoreCase聊天信息{……//显示聊天信息}elseiftype.equalsIgnoreCase用户列表{……//改动用户列表中成员}}}
四、调试分析(图1)服务器端(图2)客户端(图3)客户上线显示(图4)成员列表(图5)说话者的心情(图6)通话方式(图7)显示信息
五、测试分析上面的__聊天室是基于C/S结构的网络工具,运用SOCKET类和SERVERSOCKET类网络编程工具__的简单聊天系统,分为服务器端和客户端网上任何两台机器之间要进行SOCKET通信,只要将一台作为服务器,另一端做为客户端即可实际应用中,作为服务器的计算机通常性能较好,服务器往往面临很多客户的连接访问SOCKET类用在客户端,用户通过构造一个SOCKET类来建立与服务器的连接SOCKET连接可以是流连接,也可以是数据报连接,这取决于构造SOCKET类时使用的构造方法,但一般使用的流连接流连接的优点是所有数据都能准确、有序地传送到接受方,缺点是速度慢而在服务器端创造一个SERVERSOCKET对象,通过执行AC__PT方法监听客户连接,这将使线程处于等待状态然后在客户端构造SOCKET类,与服务器的指定断口进行连接服务器监听到连接请求后,就可在两者之间建立连接连接建立之后就可取得相应的输入输出流进行通讯,一方的输出流发送的数据将被另一方的输入流读取该程序实现了简单的多用户聊天演示;用户名输入界面,用户输入身份后再进入聊天界面;在客户方显示成员列表,可以选择将信息发送给哪些用户;如何在服务器方对退出的用户进行处理,保证聊天发送的消息只发给在场的用户,这点客户方与服务器方配合编程,客户退出时给服务器方发消息;以及说话人当时是心情,语气等
六、课设心得
七、____。