局域网内即时通讯系统设计_第1页
局域网内即时通讯系统设计_第2页
局域网内即时通讯系统设计_第3页
局域网内即时通讯系统设计_第4页
局域网内即时通讯系统设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉长江工商学院-工学院项目名称: 局域网内即时通讯 系统设计 学生姓名: 学 号: 班 级: 指导教师: 2012年6月921目 录1 绪论11.1设计目的11.2实现意义11.2 设计思想12 系统功能分析22.1系统整体功能分析22.2 系统可行性分析22.3个人资料功能分析22.4自动搜索用户分析22.5点对点文字传输分析33开发技术介绍33.1 swing的图形用户界面33.2 udp数据报33.2.1发送数据33.2.2接收数据33.3 广播数据报34详细设计44.1 通讯系统界面设计44.2 自动搜索在线用户设计64.3 点对点通讯设计75 系统性能测试85.1登录界面性能测试8

2、5.2在线列表刷新测试95.3点对点文字传输测试10设计小结11致谢12参考文献13附录141 绪论1.1设计目的计算机网络是计算机科学与技术专业的一门核心课程,计算机网络课程设计是计算机网络的一个综合实践环节。通过本课程设计要使学生达到以下目标:(1)深入理解计算机网络的基本原理与协议,是课堂知识学习的一个巩固;(2)熟悉计算机网络应用编程的基本方法,拓展学生的应用能力;(3)为后续的网络课程学习打下较为坚实的基础;(4)提高分析、设计软件系统以及编写文档的能力。1.2实现意义该课题要求完成一个基于局域网的即时通讯系统,方便局域网内的员工之间的工作交流。同时,为了使用与维护这个系统尽可能简单

3、,该系统应不依赖于某个特定服务器。在信息时代飞速发展的今天,通讯的发展也是日新月异,从当初的烽火狼烟的一个通讯到现在的电话、传媒、聊天。越来越多的通讯系统应用到了人们的生活中,而在日常的工作中通讯也是必不可少的,所以开发这个通讯系统的意义在于更好的方便一个局域网内的员工之间互相通讯的问题,这样使得公司的效率更加的高本系统采用基于socket的局域网通信工具的设计与实现的方法。基于socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可

4、以很好地解决企业内部局域网的各种通信需求。 基于socket的局域网聊天工具很好地诠释了socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。1.2 设计思想熟悉java swing界面的设计,在搭配系统开发条件下能利用socket编程技术、多线程开发技术、tcp、udp协议等进行局域网聊天软件的实际开发。2 系统功能分析2.1系统整体功能分析系统的整体功能是一个在局域网内方便员工通讯的作用,所以系统除了可以发送信息之外还要可以接收其他用户发送给自己的信息,从某种意义上来

5、说该系统没有指定的服务端,每一个用户既是客户端也是服务端。大体的系统模块如下。局域网内即时通讯系统客户端登录点对点文字传输自动刷新在线列表图2-1 系统模块图2.2 系统可行性分析由于本学期我们学习得是java,因此本系统采用的java为开发语言进行开发的,采用的工具为eclipse,下面为java的一些优点:首先,java是一种强大的、面向对象的、分布式的、半解释半编译的、键壮的、安全的、结构的、中立的、可移植非常强的、性能很优异的、多线程的、动态的计算机语言。java的开发环境有不同的版本,sun公司相继的推出了j2me、j2se、j2ee三大平台,尤其是j2se是java 2标准平台,广

6、泛用于工作站、pc机,被称为“互联网上的世界语”。这些为我们开发系统提供了强大的平台支持。而且java在互联网方面具有得天独厚的优势,也是最吸引我的地方之一。因此用java开发此系统是完全可行的。2.3个人资料功能分析因为该通讯系统是一个面向日常工作上班一族的,而且是一个面向个人的系统,所以在这个方面必须有一个设置个人资料的功能,在通讯中可以通过个人资料来区分不同的工作人员,以及在需要时候选择不同的人员进行通讯,所以在进行设计的时候需要设置一个个人资料的功能,这样使得通讯更加方便。2.4自动搜索用户分析在通讯的时候不同的用户可能在不同的时间运用这个通讯系统,或者会在不同的时候关闭这个系统,所以

7、我们面对这个问题,需要及时的更新在线的用户列表,当某一个用户登录上之后,系统会自动的搜索当前所在线的全部用户,然后每隔一段时间会自动的搜索新增的用户和下线的用户,这样让系统更加的人性化。2.5点对点文字传输分析有了个人资料和自动搜索用户的功能的同时,不可缺少的还有一个就是点对点传输文字信息,员工之间互相通讯的时候要确保只是通讯时的两个员工之间能接受互相发送的信息,而不是一经发送全部的员工都收到了,所以在这个方面添加一个点对点文字传输的功能可以让员工之间单独的传输信息。3开发技术介绍3.1 swing的图形用户界面swing是日前java不可或缺的窗口工具组,在swing尚未推出之前,要编写 个

8、java窗口程序必须使用awt(absbactwlndowtooht)的包,awt最大的缺点在于使用上相当没有弹性,例如您无法仔细地改变组件的外观。这个原因主要是awt中大部分的组件均含有native code,这样的做法相当容易现解,因为窗口中的每个组件都可能与操作系统相互沟通(不管是输入或输出),而我们使用的操作系统并个是由java程序所写成,因此要与操作系统相互沟通必须使用与操作系统兼容的程序语言,产生所谓的对等(peer)组件,这样的做法所需付出的代价除了刚刚提到的没有弹性外,也可能耗费大量的系统资源,因为建立一个aw组件就等于建立一个对等对象,然后由此对等对象直接跟操作系统沟通,由此

9、若我们想建立一个1010大小的电子表格,至少就必须产生101个对等对象(可能是内100个texfield组件加上一个frame组件组成),这样的做法似乎太没有效率。swing中只有jframe、jdialog、jwindow与japplet不是纯java所写成,主要是窗口画面总要有跟操作系统沟通的渠道,这样才知道用户是不是敲了键盘、按了鼠标或关闭了窗口。当您在jframe上绘制了100个jtextfield组件时,实际上只会产生一个对等组件,也就是由jframe所产生,利用这个唯一的对等组件来跟操作系统相互沟通,这样就能节省相当多的系统资源。再者,不同的操作系统所对应的对等组件可能有不同的效果

10、,减少对等物的产生将利于系统的稳定度。3.2 udp数据报3.2.1发送数据第一步先创建datagrampacket对象,用datagrampacket类将数据打包,即用datagrampacket类创建一个对象,称为数据报,用datagrampacket的两个构造方法可以创建待发送的数据报。第二步用datagrampacket类的不带参数的构造方法datagrampacket()创建一个对象,该对象负责发送数据报3.2.2接收数据用datagrampacket类的构造方法datagrampacket(int port)创建一个对象,其中的参数必须与待接收的数据报的端口号相同,例如,如果发送方

11、发送的端口号是5666,该对象mail-in使用方法receive(datagrampacket pack)接收数据报,把收到的数据报传递给参数pack。因此,我们需要使用datagrampacket类的构造方法datagrampacket(byte,int length)创建一个数据报,用于接收数据报。3.3 广播数据报广播数据包类似于电台广播,进行广播的电台需在指定的波段和频率上广播信息,接收者只有将收音机调到指定的波段、频率才可以接收到广播的内容。广播数据包也是这个道理,通讯系统的程序中用以下几个步骤设计广播数据报,(1)设置组播地址,使用inetaddress类创建组播组地址。(2)创

12、建多点广播套接字,使用multicastsocket类创建一个多点广播套接字对象(3)设置广播的范围,当数据经过广播的最大取值时,该数据就被网络丢弃(4)加入组播组准备广播或接收的主机必须让多点广播套接字对象调用方法public void joingroup(inetaddress macastaddr)threows ioexception加入广播组。(5)广播数据和接收数据,进行广播的主机可以让多点广播套接字对象调用一个方法使得指定的数据报广播到组播组中的其他主机,接收广播的主机可以让多点广播套接字对象调用一个方法来接收广播的数据报中的数据,并将接收的数据存放到指定的数据报中。4详细设计4

13、.1 通讯系统界面设计(1)用户输入对应的账号和密码则可以登录到自己的用户界面。类型名称用途jlabellabel1,label2创建“用户名”“密码”标签jbuttonbutton创建按钮“登录”jtextfieldtext1,text2创建两个输入的文本框boxbasebox用于一个总体的装载boxboxv2用于装载label1和text1boxboxv3用于装载label2和text2boxboxv4装载boxv2和boxv3该界面的设计运用了swing组件的boxlayout布局,界面总体是一个大的box,界面定义了jlabel label1,label2;两个标签,一个存放的是“账号

14、”一耳光存放的是“密码”,有两个标签之后在创建两个对应的文本框jtextfield text1,text2;最后还需要添加的是一个“登录”按钮button,然后运用嵌套盒式将那些元件排版,创建四个盒式布局将两个标签和两个文本框分别置于两个列中,将按钮放于第三个盒式中,最后将上述的三个一起置于一个盒式容器中。(2)该界面负责显示已经登录的用户的昵称和当前在线的用户列表。jlabel label=new jlabel(昵称);jlabel label1;string columns=在线列表; string data =new string1001; defaulttablemodel model

15、=new defaulttablemodel(data,columns); jtable table=new jtable(model); jpanel p;name=s1;this.label=label;this.address=address;port=5858;thread=new thread(this);label1=new jlabel(name);table.setrowheight(20);table.addmouselistener(this);p=new jpanel();p.add(label);p.add(label1);add(p,borderlayout.nort

16、h);add(new jscrollpane(table),borderlayout.center);setbounds(100,100,200,600);setvisible(true);validate();thread.start();该界面建立一个存放用户姓名的标签,该标签的创建根据登陆页面用户输入的姓名来决定标签的内容,另外创建一个标签来存放“在线列表”,然后实质上存放在线列表里面的内容则有一个表格组件来存放所对应的在线用户,通过udp数据报广播来获取在线的用户的姓名以及ip地址,然后将数组的数据导入表格组件中,就可以形成在线用户列表。(3)该界面是一个通讯系统中的聊天界面。在下方的

17、窗口处可以输入所要发送的信息,并且发送出去时在上方页面显示,上方页面除了可以显示自己发送的信息之外还可以接受其他用户给自己发送的文字信息。string name;/自己的昵称string name1;/对方的昵称string address1;/对方的ipjtextarea outmessage=new jtextarea(12,30);jtextarea inmessage=new jtextarea(12,20);jbutton b=new jbutton(发送数据);send(string s,string s1,string s2) super(s2);address1=s;name=

18、s1;name1=s2;setsize(450,500);setvisible(true);jpanel p=new jpanel();b.addactionlistener(this);p.add(outmessage);p.add(b);container con=getcontentpane();con.add(new jscrollpane(inmessage),borderlayout.center);con.add(p,borderlayout.south);thread thread=new thread(this);该页面用创建两个jtextarea对象来分别存放要发送的信息和

19、聊天信息。outmessage用来存放所要发送的数据,而inmessage用来存放聊天的信息。4.2 自动搜索在线用户设计搜索在线用户的设计是基于广播数据报的,通过采用组播地址然后创建广播套接字,设置一个广播的范围,在这里设置的是一个本地的局域网的范围。设置了广播范围之后加入广播组,最后就可以广播数据报和接收广播数据报。group=inetaddress.getbyname(239.255.8.0);socket=new multicastsocket(port);socket.settimetolive(255);socket.joingroup(group);系统的程序采用的就是一个这样的

20、设计,在一个端口上广播信息,广播的信息在对方的某个端口可以接收到这些信息。datagrampacket packet=null;byte data=total.getbytes();packet=new datagrampacket(data,data.length,group,port);system.out.println(new string(data);socket.send(packet);packet是一个待广播的数据报,用一个数组来存放信息,并且设置了长度,还有端口号,最后通过socket在本地的局域网上进行广播数据报。通过广播自己的ip地址,让所有在线的用户接收到自己的ip地址

21、并且添加到对方的在线列表中,这样每一个用户的一个广播就使得列表可以更新。在线用户1在线用户2在线用户3不在线用户4接收ip地址,刷新列表接收ip地址,刷新列表不作任何处理图 4-1 广播数据报4.3 点对点通讯设计在设计通讯的方式时选择的是使用udp数据报的一个点对点的通讯方式,可以让聊天的对方互相发送和接收数据报,使用构造方法创建数据报对象datagrampacket(b,b.length,address,5679);/发送端口是5678datagramsocket mail=new datagramsocket();含有数组指定的数据,数据中存放时要发送给对方的信息,并且要设置发送的地址a

22、ddress,以及要发送的端口号是5679的主机号。而在接收的时候byte b=new byte8192;mail.receive(pack);创建一个数据用于存放收到的数据,而且设置了一个参数pack,可以把收到的数据报传递给参数pack图 4-2 udp传输方向图udp通信的基本模式其实是将数据报打包,好比将信件装入信封一样,然后将数据报发送目的地;而接收别人发来的数据报就好比接收信封一样,就收之后查看数据报中的内容,udp虽然不支持可靠交付,但是在一定程度上可以容忍一些小的错误,而在这个前提下系统可以得到最快的速度通信。5 系统性能测试5.1登录界面性能测试运行程序之后显示程序的登录界面

23、,输入客户所要登陆的个人信息,账号和密码。当输入账号和对应的密码之后便可以登录通讯页面。图 51 登录界面测试5.2在线列表刷新测试如图做了一个其他用户上线和下线时不同的效果图5-2 用户在线测试当用户“小娜迦”登录个该系统之后,在线列列表便会在局域网内自动搜索当前在线的用户,搜索到了用户“赏金猎人”便将他添加到在线列表的表格中。图 5-3用户下线测试当用户“赏金猎人”下线时,由于系统在不停的更新自己的在线列表,所以当其他用户下线时,本系统的在线列表也会刷新当前的列表。5.3点对点文字传输测试图 5-4 文字传输测试用户在在线列表中选择所要通讯的用户,用户“张三”和李四通讯,当发送信息过去后,

24、窗口会显示用户之间的聊天信息,并且对方的聊天窗口会收到用户发送过来的信息设计小结一个多星期的的计算机网络的课程设计终于完成了,现在想一想过去这几天的工作,觉得很有意义。虽然做的过程中有很多知识点已然忘记的差不多了,但是随着程序的制作和运行,之前的java和计算机网络所学习到的知识点通过自己看书查资料和问同学,也都差不多都想起来了。有些较难解决的问题在自己的能力范围之内可能不能很好的解决,但是通过查阅相关的资料和重新制作也都一一的解决了。通过这次的计算机网络课程设计使我对java的网络编程以及udp数据报和广播数据报有一个大体的了解了。在这次的计算机网络课程设计中,我用的是java的网络编程以及

25、swing组件还有线程的相关知识来解决。在做了这次的计算机网络课程设计以后,我觉得我在解决问题的方面有了一个提高,以前遇到的问题想不明白的,现在几乎都已经了解了。 课程设计的制作过程已经结束,通过上网查资料,然后问同学,在写程序中,运用了更多以前未运用的技巧。这使我学到了更多的知识,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,也为我在这方面积累了一些经验。通过这次课程设计使我懂得了理论与实际相结合的重要性,我觉得动手操作才是硬道理,而且还需要总结经验,这样才会有提高。我想着就是学习,不仅仅学知识,更重要的是学方法。致谢课程设计终于按期完成,感谢在这次设计中老师和同

26、学给我提供的帮助。本次课程设计设计步骤包括分析、设计、编码、调试以及论文的写作,在这一过程中,我通过查阅大量有关资料、向老师请教、与同学交流经验等方式使自己学到了不少有用的知识,并大大提高了自己的动手能力。让我充分体会到了在创造中探索的艰辛和系统运行成功后的喜悦。本设计在页面和功能上还有很多需要完善的地方,但是在我完善的地方尽量保证了用户的良好体验,减少因为程序员的逻辑错误而造成的bug。尽量让用户的错误操作能有一个合理的结果。最后祝各位老师工作顺利、身体健康!参考文献1 加 管贻生 java 高级实用编程 清华大学出版社 2004.12 谢希仁 计算机网络(第五版) 电子工业出版社 2011

27、.123 耿祥义、张跃平 java 大学实用教程(第2版) 电子工业出版社 2011.54.张桂珠 刘丽 陈爱国 java面向对象程序设计(第2版)北京邮电大学出版社5毕广吉.java程序设计实例教程m. 北京:冶金工业出版社,2007年6.王保罗.java面向对象程序设计m. 北京:清华大学出版社,2003年附录import .*;import .inetaddress;import javax.swing.*;import java.awt.*;import javax.swing.border.*;import java.awt.event.*;import java.io.*;impo

28、rt .unknownhostexception;import java.util.*;import javax.swing.table.defaulttablemodel;public class hh public static void main(string args)throws unknownhostexceptionstring s;inetaddress address=inetaddress.getlocalhost();s=address.gethostaddress();new buju(s); class buju extends jframe implements a

29、ctionlistener jlabel label1,label2; string s; jbutton button; box basebox,boxv1,boxv2,boxv3,boxv4; jtextfield text1,text2; int number=100; buju(string s) this.s=s; text1=new jtextfield(10);text2=new jtextfield(10);label1=new jlabel(账号); label2=new jlabel(密码); button=new jbutton(登录); boxv1=box.create

30、verticalbox(); boxv2=box.createhorizontalbox();boxv4=box.createverticalbox();boxv4.add(box.createverticalstrut(8);boxv4.add(button);boxv2.add(label1);boxv2.add(text1);box boxv3=box.createhorizontalbox();boxv3.add(label2);boxv3.add(text2); basebox=box.createverticalbox(); basebox.add(boxv2);basebox.a

31、dd(boxv3); basebox.add(boxv1);basebox.add(boxv4);button.addactionlistener(this); setlayout(new flowlayout(); add(basebox); validate(); setbounds(400,400,400,200); setvisible(true); setdefaultcloseoperation(jframe.exit_on_close);public void actionperformed(actionevent e)if(e.getsource()=button)string

32、 s1=text1.gettext();new asend(s,s1).start();new receive(s,s1); class receive extends jframe implements runnable,mouselistenerjlabel label=new jlabel(昵称);jlabel label1;string columns=在线列表; string data =new string1001; defaulttablemodel model=new defaulttablemodel(data,columns); jtable table=new jtabl

33、e(model); jpanel p;int tablerow = 0;/表示存有的在线人数thread thread;int port;inetaddress group=null;multicastsocket socket=null;string address;string name;string total; /将要发送的ip和昵称打包string other=new string1003; /得到的数据有3类,即昵称、ip、端口号receive(string address,string s1)name=s1;this.label=label;this.address=addres

34、s;port=5858;thread=new thread(this);label1=new jlabel(name);table.setrowheight(20);table.addmouselistener(this);p=new jpanel();p.add(label);p.add(label1);add(p,borderlayout.north);add(new jscrollpane(table),borderlayout.center);setbounds(100,100,200,600);setvisible(true);validate();thread.start();se

35、tdefaultcloseoperation(jframe.exit_on_close);trygroup=inetaddress.getbyname(239.255.8.0);socket=new multicastsocket(port);socket.joingroup(group);catch(exception e)public void run()int t=0;while(true)byte data2=new byte8192;datagrampacket packet=null;packet=new datagrampacket(data2,data2.length,grou

36、p,port);tryint i;socket.receive(packet);string message=new string(packet.getdata(),0,packet.getlength();stringtokenizer fenxi=new stringtokenizer(message,+);for(i=0;fenxi.hasmoretokens();i+)/得到对方的ip与昵称othertablerowi=fenxi.nexttoken();for(i=0;itablerow-1)else new send(otheri1,name,(string)table.getva

37、lueat(i,0);/将自己的昵称与对方的昵称与ip传递class asend extends threadstring s,s1,total;int port=5858;inetaddress group=null;multicastsocket socket=null;asend(string s,string s1)this.s=s;this.s1=s1;total=s1+s+5858;trygroup=inetaddress.getbyname(239.255.8.0);socket=new multicastsocket(port);socket.settimetolive(255

38、);socket.joingroup(group);catch(exception e)public void run()while(true)trydatagrampacket packet=null;byte data=total.getbytes();packet=new datagrampacket(data,data.length,group,port);system.out.println(new string(data);socket.send(packet);sleep(2000);catch(exception e)class send extends jframe impl

39、ements runnable,actionlistenerstring name;/自己的昵称string name1;/对方的昵称string address1;/对方的ipjtextarea outmessage=new jtextarea(12,30);jtextarea inmessage=new jtextarea(12,20);jbutton b=new jbutton(发送数据);send(string s,string s1,string s2) /与s对话中super(s2);address1=s;name=s1;name1=s2;setsize(450,500);setvisible(true);jpanel p=new jpanel();b.addactionlistener(this);p.add(outmessage);p.add(b);container con=getcontentpane();co

温馨提示

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

最新文档

评论

0/150

提交评论