ImageVerifierCode 换一换
格式:DOC , 页数:23 ,大小:82.54KB ,
资源ID:3937488      下载积分:5 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3937488.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     索取发票    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(基于UDP协议的聊天程序设计报告.doc)为本站上传会员【a199****6536】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

基于UDP协议的聊天程序设计报告.doc

1、编号:计算机网络课程设计题 目:基于UDP的聊天程序 系 别: 计算机科学与工程学院 摘要随着网络技术的发展及人们生活的需求,网络聊天已越来越受到人们的青睐 。网络聊天已经成为人们工作生活中传递信息、交流感情的重要工具,给人们带来了很大的方便. 本课题是开发一个基于UDP的局域网聊天系统,运用软件工程的设计流程,综合运用数据库编程技术、Windows程序设计技术、网络通讯技术,此网络聊天工具采用客户端/服务器(C/S)模式,客户端采用UDP与服务器连接,客户端与客户端之间通过UDP互相通讯。服务器端具有服务器端口设置,此聊天工具能实现多人聊天功能,适用于局域网使用的网络聊天工具,其操作简单,灵

2、活性好,运行也比较稳定。关键词:网络通讯;客户端/服务器模型;用户数据报协议;套接字一、需求分析1.1 课程设计目的 开发一个专用于实现两台计算机之间即时通讯的软件以方便两台计算机之间信息的交流。在连接并通信时尤其是近程的即时通讯彻底的脱离了远程的服务器避免了和远程服务器连接时过多的浪费网络资源。并且避免了服务器忙或与服务器无法连接时浪费过多时间用于和服务器建立连接因此这个软件是极具适应性和实用性的即时通讯软件本次课程设计的目的是学习基于UDP协议实现网络聊天程序已达到学会面向无连接方式的程序设计方法并理解网络编程中面向无连接的概念。 1。2 课程设计的内容 用户数据报UDP是一个无连接协议使

3、用这种协议时并不需要在两台计算机之间建立固定的连接也就是说通信双方没有服务器和客户机之分它们之间进行的是对等通信所以它的优势很明显是现代通信不可或缺的一部分。所以利用它的优势设计一个可以聊天的软件实现两台计算机间的即时通讯。 1。3 课程设计要求 基于UDP协议实现的聊天和一对多的聊天提供友好的用户界面便于用户进行操作。 二 。 UDP协议的理解:UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议.UDP协议从问世至今已经被使用了很多

4、年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议.UDP协议直接位于IP(网际协议)协议的顶层.UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP协议使用端口号为不同的应用保留其各自的数据传输通道。正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据.有的网络应用只能使用预先为

5、其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口.数据报的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节.不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节.UDP协议使用报头中的校验值来保证数据的安全.校验值首先在数据发送方通过特殊的算法计算得出,在传

6、递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示,由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。三. UDP协议特点 1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步. 2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关

7、于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。 3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据. 4、UDP传送数据较TCP快速,系统开销也少。 5、由于缺乏拥塞控制(congestion control),需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具.数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这

8、个潜在的问题。 从以上特点可知,UDP提供的是无连接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。四。 基于C/S的多客服端相互通信原理分析:在C/S模式中,它是在分散式 ,集中式,以及分布式基础上发展起来的一种新模型,目前大多数网络通信以及应用都属于这种模型,C/S模式将一个网络事务分为两部分,一部分是客户端(Client),他为用户提供网络请求服务的接口,另一部分是服务端(Server),它负责接受用户对服务的请求,并将这些服务透明的提供给用户,既适用于实际应用的程序,又实用于真正的计算装置,举例来说,我们到饭店吃饭时,要首先提出请求吃什么,属于客户端,饭店服务员根据请求提供相应

9、的服务,属于服务端,至于相应的饭菜是由哪一个厨师来做,则由饭店的服务员去联系,而客户端只需要和服务器打交道就行了,从程序实现上来说,客户端和服务器打交道实际上是两个进程打交道,服务端启动server进程,并等待客户端与其联系,而客户端则启动客户进程和服务器打交道。当服务器进程处理完一个客服进程请求的信息之后,由接着等待其他客户的请求。五 套接字编程原理分析:图1.1 套接字编程原理图注释:socket(),使用前创建一个新的套接字;bind(),将套接字地址与所创建的套接字号联系起来;send()与recv(),数据的发送与接收;closesocket(),关闭套接字。六、概要设计服务器客户机

10、甲客户机乙客户机丙图2.1 整体框架设计图服务器端主要实现的功能是启动一个监听的进程,开放自己的端口号为7777,不断的监听是否有新的客服端进程向自己发送连接请求,为每一个主动连接自己的客户端设置一个ID号设置一个threads的容器用来管理客户端的线程。与客户端建立连接,实现socket通信,对于服务器端是先接受数据流然后再发送数据流,客服端发送过来的信息经服务器端然后转发到其他所有的客户端,服务器端相当于中间的桥梁。客户端要求主要实现的功能是建立一个图形的界面,用于显示聊天信息等,并且建立与服务器端的通信,主动的向服务器端发送连接请求,然后对输入文本框注册事件监听并且发送给客服端,不断的监

11、听服务器端发来的信息,然后显示出来。七、详细设计服务器端:创建服务端接口建立一个seversocket的类svsocket创建一个容器用来管理客户端进程开始监听,监听是否有客户端连接,有的话与其建立连接分配ID监听线程监听端口是否有消息传入如果有的话接收信息再将信息发送到其他的所有的客服端当某客户离开,结束他与其他人的通信为客户端连接创建线程从容器vector中删除该线程表示该线程已经离开聊天室,结束两者之间连接图7。1 服务器端整体设计流程图客户端建立一个seversocket的类,并且创建一个vector用来管理客户端的线程,然后就开始检测,如果有客户端请求与服务器连接就与其建立socke

12、t连接,创建进程设置ID,告诉其他的客户端有新的客户端接入,然后开始监听所有的客户端线程如果有信息通过端口进入就接受然后再发送给其他客户端,如果有客户端退出,就会告诉其他的客户端并且关闭与该客户端的socket连接,然后在vector里面删除相应的线程。主界面服务器界面,当运行服务器端则出现运行客服端登录心得体会:经过两个星期的学习和实践,我也算是顺利的完成了计算机网络课程设计,同时对计算机网络有一个大致的了解,在实践过程中遇到了很多的困难,感觉自己很难将理论与实践相结合,觉得我们学习的那些知识也派不上用场,通过这次课设,我深刻的认识到实践与理论必须 要想结合才能使所学的知识变成可用的,通过自

13、己的努力和老师同学们的帮助,多了一种看待问题的角度;我也发现了我所学知识不扎实,只是走马观花的应付考试,在以后的学习中需要时刻的告诫自己,踏踏实实做好每一步。本次课程设计是利用java语言编写的,虽说自己以前接触过这种语言,但是经过这两周的学习,我受益匪浅。首先,我进一步弄懂了JAVA语言的编程方法和原则,并学会了编写java程序.其次,使我更深层次的理解到JAVA语言是一种面向对象的语言,具有可视化编程的特点且代码具有可移植等特点。本次课程设计是实现一个UDP即时通讯程序。经过编写程序和运行,调试程序,我对java语言有了更深的了解。另外,使我对UDP协议的特点和工作过程有了更深的了解。UD

14、P协议提供无连接的、不可靠的服务.它工作于传输层,是传输层的重要协议之一.最后,UDP协议是利用客户端和服务器端模型来实现传输的。 本次课程设计使我明白了知识的重要性,同时也更加懂得实践更不可少。我们要经常把所学的知识运用到实践,这样,才能充分的融会贯通。同时,也使我认识到自己动手能力太差,为我以后的学习和发展提供了一个警钟!本次课程设计的过程中,虽然遇到了不少问题,但最后还是成功的完成了.这次课设对于我而言是有很大的收获,懂得独立寻找资料学习,这是最大的收获,在以后的工作中肯定会面临不懂得问题,有了这次课设的经验,就能够去独立学习并解决困难。主要代码package server; impor

15、t java。awt。Container; import java。awt.event.ActionEvent; import java。awt。event。ActionListener; import java。awt。event。WindowAdapter; import java.awt。event。WindowEvent; import java.io.DataInputStream; import java。io。DataOutputStream; import java。io.IOException; importjava。io。ObjectInputStream; importj

16、ava。io.ObjectOutputStream; import 。ServerSocket; import java。net.Socket; import java.util。ArrayList; import java.util.Date; import javax。swing。JButton; import javax。swing。JFrame; importjavax。swing。JLabel; import javax.swing.JOptionPane; importjavax。swing。JScrollBar; import javax。swing.JScrollPane; i

17、mport javax。swing。JTextArea; import javax。swing。JTextField; publicclassserverextends JFrame private JTextArea allmsg; private JTextField currnum,totalnum,copyright,chatmsg; private JButton send; private JScrollPane js; intnum1,num2,port;/ - num1:当前在线人数 num2:总上线人数 port:服务端口号 -/private ServerSocket ss

18、; ArrayListlists;/存放所有在线用户 public server() super(”聊天室服务器端); this.setSize(310,660); this.setLocation(200,50); lists = newArrayList(); num1 = num2 =0; port = 7777; currnum = new JTextField( 当前在线人数: ”+num1); currnum.setEnabled(false); totalnum = new JTextField( 上线总人数: +num2); totalnum。setEnabled(false)

19、; allmsg = new JTextArea(); allmsg.append(” - 系统消息 -n); allmsg。setEditable(false); allmsg.setLineWrap(true); /允许自动换行 js = new JScrollPane(allmsg);/为JTextArea添加滚动条 chatmsg = new JTextField(”在此输入系统信息); chatmsg。addActionListener(new ActionListener() publicvoid actionPerformed(ActionEvent arg0) String s

20、tr = chatmsg。getText()。trim(); if(!”。equals(str) sendmsg((new Date().toLocaleString()+” - 系统消息: ”+str);chatmsg。setText(”); else JOptionPane。showMessageDialog(null, 消息不能为空”,错误”,JOptionPane.OK_OPTION); chatmsg.setText(”);/ 发送信息后,将输入栏中的信息清空 */ ); send = new JButton(发送”); send。addActionListener(new Acti

21、onListener() publicvoid actionPerformed(ActionEvent arg0) String str = chatmsg。getText().trim(); if(!”。equals(str)) sendmsg(new Date()).toLocaleString()+” 系统消息: ”+str);chatmsg.setText(); else JOptionPane。showMessageDialog(null, ”消息不能为空”,错误”,JOptionPane。OK_OPTION); chatmsg。setText(”);/ 发送信息后,将输入栏中的信息

22、清空 / ); addcomponettocontainer(); this.addWindowListener(new WindowAdapter() publicvoid windowClosing(WindowEvent we) sendmsg(SYSTEM_CLOSED);/ - 向客户端发送服务器关闭信息 - / destory(); ); start(); / - 启动连接服务 - / publicvoid addcomponettocontainer() Container c = this。getContentPane(); c.setLayout(null); currnum

23、。setBounds(20,15,130,20); totalnum。setBounds(155,15,125,20); js。setBounds(10,50,280,500); chatmsg。setBounds(10,560,180,30); send.setBounds(220,560,70,30); copyright.setBounds(10,600,280,20); c。add(currnum); c。add(totalnum); c.add(js); c。add(chatmsg); c.add(send); c。add(copyright); this。setVisible(tr

24、ue); this.setResizable(false); publicvoid start() boolean isStarted = false;/ - 用于标记服务器是否已经正常启动 - /try this.ss = new ServerSocket(port); isStarted = true; this。allmsg。append((new Date()。toLocaleString()+ 服务器启动 端口: ”+port+n); while(isStarted) Socket client = this。ss。accept(); /* 监听客户端的连接 - */ DataInp

25、utStream in = new DataInputStream(client.getInputStream()); String name = in.readUTF(); user u = new user(); u.name = name; u。socket = client; lists。add(u); /将该用户加到列表中去 num1+; num2+; currnum.setText(” 当前在线人数: ”+num1); totalnum。setText( 上线总人数: ”+num2); this.allmsg.append((new Date()。toLocaleString()+

26、 : ”+u。name+” 登录 n”); new Thread(new ClientThread(u))。start();/* - 为该用户启动一个通信线程 / catch (IOException e) System。out.println(”服务器已经启动。.。.。”); System.exit(0); class ClientThread implements Runnable user user = null; booleanisConnected = true; DataInputStream dis = null; DataOutputStream dos = null; pub

27、lic ClientThread(user u) this。user = u; try this.dis = new DataInputStream(this.user。socket。getInputStream(); this.dos = new DataOutputStream(this。user.socket.getOutputStream(); catch (IOException e) / TODO Autogenerated catch block e.printStackTrace(); publicvoid run() readmsg(); / - 读取客户的聊天信息 /pub

28、licvoid readmsg() while(isConnected) try String msg = dis。readUTF(); if(”quit&logout。equals(msg)/当用户关闭客户端窗口时,发送quit字符串 表示用户已经退出 num1-; try this。dis.close(); this。dos。close(); this。user.socket。close(); this.isConnected = false; catch(IOException ioe) ioe。printStackTrace(); finally this.isConnected =

29、false; if(dis!=null) this。dis。close(); if(dos!=null) this。dos.close(); if(this.user.socket!=null) this。user。socket。close(); lists。remove(this.user);/从列表中删除该用户 currnum.setText( 当前在线人数: +num1); allmsg.append((new Date()。toLocaleString()+ : ”+this。user.name+” 退出n”); else sendmsg(msg); catch (IOExceptio

30、n e) e.printStackTrace(); / 将信息进行转发 - /publicvoid sendmsg(String msg) user us = new user(); DataOutputStream os = null; if(lists。size()0) for(int i=0;i);/ - 指定窗口的标题 /this。s = socket;/ 接收从LoginFrame中传递过来的Socket -/this.nic = name+ 说: ”; welcome = new JTextField( ”+name+” 欢迎您来到聊天室 ”,100); welcome。setBackground(Color.blue); welcome.setEnabled(false); copyright = new JTextField(” - all copyright TOPking -

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服