网络课程设计报告模板.doc_第1页
网络课程设计报告模板.doc_第2页
网络课程设计报告模板.doc_第3页
网络课程设计报告模板.doc_第4页
网络课程设计报告模板.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计(论文)任务书 学院 专业 班 一、课程设计(论文)题目 基于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)贾 斌等.网络编程技巧与实例.北京:人民邮电出版社,2001(2)侯 捷 . 深入浅出MFC 华中科技大学出版社(3)http:/ /6)课程设计进度安排内容 天数 地点总体需求与分析构思及收集资料 1 图书馆各模块的编程实现,调试与修改 3 机房撰写论文与答辩 1 图书馆、机房,学生签名: 08年 6 月 29日课程设计(论文)评审意见(1)考勤与学习态度(20分):优()、良()、中()、一般( )、差(); (2)原理与设计分析(35分):优()、良()、中()、一般()、差(); (3)调试与运行(30分):优()、良()、中()、一般()、差();(4)答 辩(15分):优()、良()、中()、一般()、差();(5)格式规范性及考勤是否降等级:是()、否()评阅人: 职称: 讲师 2008年 6 月30日目录一、需求分析11.1 winsock编程技术简介.11.2 点到点聊天的原理及UDP协议的简介.3二、概要设计6三、详细设计8四、调试分析13五、测试分析14六、课设心得15七、参考文献16课程设计一 需求分析在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识.1.1 winsock编程技术简介目前,Inte.NET已成为世界上最大的TCP/IP网络。早期的站点是unix机器,一组称为Berkeley插口的约定成为INTERNET上UNIX机器之间利用TCP/IP进行通信的标准。其他操作系统也用TCP/IP进行通信,这极大地促进了INTERNET的发展。windows插口WINSOCK标准定义了一个DLL接口,通常叫做WINSOCK.DLL或者WSOCK32.DLL。无论机器上安装了哪一个DLL,只要函数的名字,参数含义以及最终的功能是相同的,应用程序就可以调用这些函数。在插口编程里一个重要的概念就是一个插口的端口。INTERNET上的每一个站点都有一个数字地址称为IP地址,通常是由逗号分开的四个数。在机器上运行的程序可以随心所欲地用插口与其他机器进行通信。请求到达机器时携带一个端口号,一个大于1024的数,它表明此请求是给那个应用程序的。多数插口的工作是基于连接的:两个程序在每一端用一个插口形成一个连接,然后沿着该连接收发数据。有些应用程序倾向无连接地发送,但是这些数据的到达是没有保障的。客户机/服务器模式在TCP/IP应用中,如何采用客户机/服务器模式。客户机一方,TCP/IP应用程序功能如下:1) 打开通信信道(申请一套接字),并连接到服务器在主机的保留端口,该端口对应服务器的TCP/IP进程。2) 向服务器发出请求报文,等待接收应答。3) 从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。服务器一方,TCP/IP应用程序动作如下:1) 打开通信信道(申请一套接字),通知本地主机在某一保留端口接收客户机请求。2) 等待客户请求到达指定端口。3) 接收到请求,启动一新进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路。4) 继续等待客户机请求。5) 如果不想响应客户机请求,关闭服务器进程。综上所述,TCP/IP应用中的服务器程序必须先于客户机进程启动,直到对客户机的响应结束或强迫终止。WINSOCK1.1版通过异步选择机制来实现非阻塞通信方式,对于非阻塞方式,函数被调用后立即返回,当传送完成后由WINSOCK给进程发一个事先约定好的消息WinSock是Windows Sockets的缩写,它作为Windows和TCP/IP之间的接口。而我们都知道TCP/IP在互联网举足轻重的作用,如果希望了解Socket,那么Berkeley Socket不可不提,它是在UNIX下对TCP/IP进行编程的标准模式。WinSock的设计和它很象,这样可以使UNIX上的应用程序在Windows平台上使用。但是,两者也有一些区别,如WinSocket利用了Windows的一些特点,而这些特点对于UNIX来说是没有的。WinSock是一个DLL,它运行于Windows 3.x,Windows for Workgroups,windows NT和Windows 95下。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,就不能使用Trumpet Winsock。同样,如果用户正在使用SLIP连接,而希望由Chameleon Sampler的Winsock切换到Trumpet Winsock,用户必须删除Chameleon的WINSOCK.DLL,然后再安装新的WINSOCK.DLL。1.2 点到点聊天的原理及UDP协议的简介利用 WinSock 控件可以与远程计算机建立连接,并通过用户数据文报协议 (UDP)。这种可以用来创建客户与服务器应用程序。与 Timer 控件类似,WinSock 控件在运行时是不可见的。 用途 1 创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。 2 创建一个服务器应用程序,作为多个用户的数据的汇入点。 3 创建“聊天”应用程序。 在使用 WinSock 控件时,首先需要考虑使用什么协议。因此我选择UDP协议 UDP 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。 协议的设置 在设计时,可以按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”, sckUDPProtocol。也可以使用程序代码来设置 Protocol 属性,如下所示: Winsock1.Protocol = sckTCPProtocol 确定计算机的名称 在与远程计算机相连接的时候,需要知道它的 IP 地址或者它的“好听的名字”。IP 地址是一串数字,每三个数字为一组,中间用点隔开(形如 xxx.xxx.xxx.xxx)。通常,最易记住的是计算机的“好听的名字”。 确定计算机的名字 1 在计算机的“任务栏”上,单击“启动”。 2 在“设置”项中,单击“控制面板”。 3 双击“网络”图标。 4 单击“标识”选项卡。 5 在“计算机名称”框中可以找到计算机的名称。 上面找到的计算机名称可以作为 RemoteHost 属性的值。 UDP 初步 创建 UDP 应用程序比创建 TCP 应用程序还要简单,因为 UDP 协议不需要显式的连接。一个 Winsock 控件必须显式地进行“监听”,另一个必须使用 Connect 方法初始化连接。 UDP 协议不需要显式的连接。要在两个控件中间发送数据,只需进行以下的三步即可(在连接的双方): 1. 将 RemoteHost 属性设置为另一台计算机的名称。 2. 将 RemotePort 属性设置为第二个控件的 LocalPort 属性。 3. 调用 Bind 方法,指定使用的 LocalPort。(下面将详细地讨论该方法。) 因为两台计算机的地位可以看成“平等的”,这种应用程序也被称为点到点的。为了具体说明这个问题,下面将创建一个“聊天”应用程序,两个人可以通过它进行实时的交谈。 创建一个 UDP 伙伴 1 创建一个新的 Standard EXE 工程。 2 将缺省的窗体的名称修改为 frmPeerA。 3 将窗体的标题修改为“Peer A”。 4 在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerA。 5 在“属性”页上,单击“协议”并将协议修改为 UDPProtocol。 6 在窗体中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。 7 为窗体增加如下的代码。 Private Sub Form_Load() 控件的名字为 udpPeerA With udpPeerA 重点:必须将 RemoteHost 的值 修改为计算机的名字。 .RemoteHost= PeerB .RemotePort = 1001 连接的端口号。 .Bind 1002 绑定到本地的端口。 End With frmPeerB.Show 显示第二个窗体。 End Sub Private Sub txtSend_Change() 在键入文本时,立即将其发送出去。 udpPeerA.SendData txtSend.Text End Sub Private Sub udpPeerA_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String udpPeerA.GetData strData txtOutput.Text = strData End Sub 创建第二个 UDP 伙伴 1 在工程中添加一个标准窗体。 2 将窗体的名字修改为 frmPeerB。 3 将窗体的标题修改为“Peer B”。 4 在窗体中放入一个 Winsoc二、概要设计运用所学的编程知识,加上网络方面的一些知识结构,模拟QQ聊天工具,通过SOCKET编写的简易网络聊天工具。1) 聊天程序的功能及其相关网络协议 1、建立侦听服务这个需求是服务器端的需求。2、用户登录包括客户端请求登录以及服务器端响应登录两个过程。3、收发聊天信息包括客户端发送聊天信息以及服务器端转发聊天信息两个过程。4、收发系统信息由服务器端发送给客户端的信息。5、用户下线包括客户端请求下线以及服务器响应请求两个过程,这个与用户登录类似。6、服务器关闭该聊天工具采用C/S结构,在分布处理过程中,使用基于连接的网络通信模式。该通信模式首先在客户机和服务器机之间定义一套通信协议,并创建一个SOCKET类,利用这个类建立一条可靠的连接;然后,客户/服务器再在这条连接上可靠地传输数据。客户机发出请求,服务器监听来自客户机的请求,并为客户机提供响应服务。这就是典型的“请求-应答”模式。服务器端和客户端的功能说明如下:服务器:功能:1、启动服务,建立侦听,接受客户端连接。2、接收、分析、转发聊天消息3、向客户端发送系统消息4、关闭服务,并向客户端发送服务器关闭消息客户端:功能:1、连接服务器,发送用户登录请求2、向服务器发送聊天信息3、接收服务器转发的聊天信息4、接收服务器发送的系统信息5、响应服务器关闭的消息 TCP/IP服务器与客户端套接字中,客户通过服务器端的IP地址和端口号来建立和服务器的连接,.Sockte类勇于执行客户端的TCP操作。每个服务器套接字运行在服务器特定的端口,监听在这个端口的TCP连接。当远程的客户端的Socket试图与服务器指定端口建立连接时,服务器被激活,判定客护端的连接,并打开两个主机之间固有的连接。一旦客户端与服务器建立了连接,则两者之间就可以传送数据,而数据是通过这个固有套接字传递的。在ServerSocket类中包含了创建ServerSocket对象的构造方法,在指定端口监听的方法,建立连接后发送和接受数据的方法。服务器与客户端根据一定的网络协议交互,直到关闭连接。三 详细设计基于客户/服务器模型的套接字编程,服务器端和客户端的设计如下所示:1)、服务器针服务器功能,设计了下面4个类:1、 用户信息链表类:提供一个链表数据结构以及一组链表的操作函数,用于保存用户信息。提供链表的添加、删除以及查找这3个基本功能。部分功能代码如下:public class UserInfoList Node root;Node pointer;int count;public UserInfoList()root = new Node();root.next = null;pointer = null;count = 0;public void add(Node n) /新的用户登陆,向链表中加入成员用户public void del(Node n) /用户离开,从链表中删除该用户public int getCount() /统计当前用户的人数public Node find(String username) /通过用户名来查找该用户的状态public Node find(int index) /通过结点来查找该用户的状态2、 服务器主框架类:提供服务器的界面,并且实现了服务器的启动和关闭以及服务器系统的消息的发送功能。部分代码如下:public class ServerFrame extends JFrame /服务器的界面设置public void init() Border bevelBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.white, Color.white, Color.white,Color.white); /提供服务器的界面,排版及部件pack();jbStartServer.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) startServer();); /响应事件监听者 /同上面的实现事件服务器的启动和关闭以及服务器系统的消息的发送:public void startServer() public void stopServer() public void sendStopToAll() public void sendMsgToAll(String msg) public void sendSystemMessage() 3、务器侦听线程类:负责侦听客户端连接,并实现响应用户登录的功能。public class ServerListenThread extends Thread ServerSocket server; /定义SOCKET端口public void run()while(!isStop & !server.isClosed() /通过SOCKET端口进行传输的数据流及传输流 /获取函数getOutputStream()和getInputStream()client = new Node();client.socket = server.accept();client.output=new bjectOutputStream(client.socket.getOutputStream();client.output.flush();client.input = new ObjectInputStream(client.socket.getInputStream();client.username = (String)client.input.readObject();4、服务器接收线程类:负责接收客户端消息,并且对消息作出判断和相应的响应public void run() sendUserList(); /把一个新的成员列表发给所有的用户while (!isStop & !client.socket.isClosed() String type = (String) client.input.readObject(); if (type.equalsIgnoreCase(聊天信息) String toSomebody = (String) client.input.readObject();String status = (String) client.input.readObject();String action = (String) client.input.readObject();String message = (String) client.input.readObject(); / 获取来自客户的消息,并进行分类发送String msg = client.username + + action + 对+ toSomebody + 说: + + message + n;if (status.equalsIgnoreCase(悄悄话) msg = 悄悄话 + msg; /分类发送客户的消息public void sendToAll(String msg) /发送消息给所有的用户2)、客户考虑设计两个类:1、客户端主框架类:用户界面、用户登录与下线、发送聊天信息public class ClientFrame extends JFrame Socket socket; /定义SOCKET客户端ObjectOutputStream output; /定义到服务器的输出流ObjectInputStream input; /定义从服务器获取数据的输入流 public ClientFrame() /客户端界面的设置,排版及组件serverAddress = new JTextArea(请输入服务器地址);/输入连接到服务器的IP地址login.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) LogIn(););/同上一样的时间响应public void LogIn() /网络数据通信 try socket = new Socket(serverAddress.getText(), 8000);/设置服务器的IP和端口号80000 catch (UnknownHostException e) serverAddress.setText(服务器地址不可达,请重新输入! );serverAddress.setEditable(true);output = new ObjectOutputStream(socket.getOutputStream();/输出信息output.flush(); input = new ObjectInputStream(socket.getInputStream();/获取输入信息output.writeObject(textfield.getText();/将消息域的信息发给服务器output.flush(); /刷新数据流2、客户端接收线程类:信息接收功能、响应服务器关闭消息public void run

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论