基于UDP协议的局域网即时通信软件设计(21页).docx
《基于UDP协议的局域网即时通信软件设计(21页).docx》由会员分享,可在线阅读,更多相关《基于UDP协议的局域网即时通信软件设计(21页).docx(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、-基于UDP协议的局域网即时通信软件设计-第 21 页基于UDP协议的局域网即时通信软件设计 指导老师:学 生: 学 号:12017年5月2日主要内容一、局域网即时通信软件简介二、软件架构三、运行结果及分析四、实验总结五、文献引用及网站六、源代码一、 局域网即时通信软件简介1局域网通讯(Local Network,简称LNLNIM)是指能够即时发送和接收互联网消息等的业务。自2001年面世以来,特别是近几年的迅速发展,局域网通讯功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。它不再是一个单纯的聊天工具,已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服
2、务等为一体的综合化信息平台。是一种终端连往即时通讯网络的服务。它不同于e-mail在于它的交谈是即时的。大部分的即时通讯服务提供了状态信息的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。LNIM最早的创始人是三个以色列青年,是他们在2001年做出来的,取名叫FreeEIM。2002年当FreeEIM注册用户数达到12万时,目前飞鸽传书FreeEIM有13万多用户,主要市场在美洲和欧洲,已成为世界上最大的局域网通讯系统。在早期的局域网通讯程式中,使用者输入的每一个字元都会即时显示在双方的萤幕,且每一个字元的删除与修改都会即时的反应在萤幕上。这种模式比起使用e-mail更像是电话交谈。在
3、现在的即时通讯程式中,交谈中的另一方通常只会在本地端按下送出键(Enter或是Ctrl+Enter)後才会看到讯息。1998年代早期,一种更早的局域网通讯形式是柏拉图系统(PLATO system)。在FreeEIM的介绍之後,同时在许多地方有一定数量的局域网通讯方式发展,且各式的局域网通讯程式有独立的协定,无法彼此互通。这引导使用者同时执行两个以上的局域网通讯软体,或者他们可以使用支援多协定的终端软体,如GaLNIM、Trillian或Jabber。近年来,许多局域网通讯服务开始提供视讯会议的功能,网络电话(VoIP),与网路会议服务开始整合为兼有影像会议与即时讯息的功能。於是,这些媒体的分
4、别变的越来越模糊。本文主要呈现一个实现局域网基于UDP协议的P2P模式的即时通信软件原型。二、 软件架构本即时通信软件基于P2P模式,不需要服务器的支持。用JAVA语言编写,平台无关性好。传输层协议为UDP,应用层协议自行设计,协议设计可靠性高、开销小。主要由Main、ChatWindow、User、Protocol、Communication、DataParse等类或模块组成,利用多线程技术、GUI及事件驱动编程。模块间耦合性低,内聚性强,可扩展性好,符合软件设计原则。部分功能限于时间因素,未能实现。各模块主要功能:Main主要实现通信软件主窗口UI和相关逻辑,显示本地用户信息、本局域网在线
5、联系人列表以及局域网搜索联系人、发起通信、退出等功能。ChatWindow主要实现聊天窗口UI和相关逻辑,由对方联系人信息、聊天内容呈现窗口、聊天文本输入等部分组成。User定义联系人的基本属性、主机相关信息(IP地址和端口)以及相关修改策略。Protocol主要实现本软件的应用层协议,包括联系人搜索请求及应答、文本信息传送、视频数据传送(未实现)、文件传送(未实现)等关键字,实现了应用层协议拆分、初步解析等功能。Communication实现基于UDP协议的数据接收和发送,为其他组件提供Write和Read方法。DataParse主要实现协议的完整解析。软件架构:实例化Main主窗口User
6、昵称、性别、年龄、IP等信息修改数据投送数据投送数据投送联系人搜索其他用户合作解析Protocol定义应用层协议信息呈现实例化ChatWindow聊天主窗口Communication实现数据接收与发送DataParse完整解析接收的数据三、 运行结果及分析本软件在实际使用中(非单机测试)使用端口8888,为便于单机测试,两终端收发端口分别各位7777和8888。一、主窗口主窗口由菜单栏Option、用户信息显示、联系人列表、搜索(Refresh)、发起通信(Chat)、退出(Quit)等部分组成。在测试中分别为随机生成的默认昵称User1646和User727,在相互搜索之后,各自列表中会显示
7、本局域网在线联系人。Option中包括修改本地用户信息、端口等内容。二、 聊天窗口在选定列表中某联系人后,点击Chat将创建一个通信实例。下面是User1646和User727的测试通信结果。 测试结果表明结果符合预期,且资源占用少,运行稳定性好。四、 实验总结 用JAVA进行应用层编程非常方便,而且易用性很强。本软件虽然功能简单,但充分利用了Swing的快捷可靠的GUI设计、JAVA支持的多线程技术和UDP协议接口,实现了局域网即时通信软件的核心功能。限于时间因素,如文件传送、视频聊天等功能没有去实现,但软件的可扩展性良好(协议解析、数据接口等),为以后的功能扩展奠定了良好基础。大二初曾写过
8、一个基于C/S模式的即时通信软件,实现了客户端和服务器端,总代码量1600行,实现了添加好友、发起聊天等核心功能,也用到了JDBC桥接MySQL数据库等内容。现在再写此类程序则得心应手。五、 引用文献及网站1搜狗百科;局域网即时通信软件简介2百度知道;JAVA基础相关六、 源程序Mainpackage mychat;import java.awt.Color;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import .DatagramPacke
9、t;import .DatagramSocket;import .SocketException;import java.util.ArrayList;import javax.swing.DefaultListModel;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JList;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;im
10、port javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.text.html.HTMLDocument.Iterator;public class Main extends JFrame implements ActionListenerCommunication cmu=null;static User usr=null;User friends=null;int maxfriendnu
11、m;int currentnum=0;JLabel name=null;JLabel gender=null;JLabel age=null;JLabel host=null;JPanel pane=null;JTextField tname=null;JTextField tgender=null;JTextField tage=null;JTextField thost=null;JScrollPane spane=null;JButton chat=null;JButton refresh=null;JButton quit=null;JList sublist=null;ArrayLi
12、st fnditem=null;DefaultListModel model=null;void inforinit()cmu.setUser(usr);tname.setText(usr.name);tgender.setText(usr.gender);tage.setText(String.valueOf(usr.age);thost.setText(usr.ip);public void setPane()model.clear();java.util.Iterator i=fnditem.iterator();while(i.hasNext()model.addElement(i.n
13、ext();public Main()model=new DefaultListModel();sublist=new JList(model);fnditem=new ArrayList();maxfriendnum=255;friends=new Usermaxfriendnum;JMenuItem mport=new JMenuItem(Change Port);JMenuItem mname=new JMenuItem(Modify Name);JMenuItem mage=new JMenuItem(Modify Age);JMenuItem mgender=new JMenuIte
14、m(Modify Gender);JMenuItem mscan=new JMenuItem(Port Scan);JMenu menu=new JMenu(Option);menu.add(mport);menu.add(mname);menu.add(mage);menu.add(mgender);menu.add(mscan);JMenuBar menubar=new JMenuBar();menubar.add(menu);this.setJMenuBar(menubar);usr=new User();cmu=new Communication(usr,this);cmu.init(
15、);cmu.start();pane=new JPanel();pane.setLayout(null);name=new JLabel(Name :);gender=new JLabel(Gender :);age=new JLabel(Age :);host=new JLabel(Ip :);tname=new JTextField();tgender=new JTextField();tage=new JTextField();thost=new JTextField();name.setBounds(10, 10, 40, 20);tname.setBounds(60, 10, 210
16、,20);age.setBounds(10, 40, 30, 20);tage.setBounds(60, 40, 40, 20);gender.setBounds(150,40,50,20);tgender.setBounds(220, 40, 50, 20);host.setBounds(10,70,40,20);thost.setBounds(60, 70, 210, 20);pane.add(name);pane.add(tname);pane.add(age);pane.add(tage);pane.add(gender);pane.add(tgender);pane.add(tho
17、st);pane.add(host);inforinit();spane=new JScrollPane(sublist);spane.setBounds(20,100,250,450);chat=new JButton(Chat);chat.setBounds(20,560,70,30);chat.addActionListener(this);refresh=new JButton(Refresh);refresh.setBounds(100,560,90,30);this.add(refresh);refresh.addActionListener(this);quit=new JBut
18、ton(Quit);quit.setBounds(200, 560, 70, 30);quit.addActionListener(this);pane.add(quit);pane.add(chat);this.add(spane);this.add(pane);this.setTitle(SineQ);this.setSize(300,650);this.setVisible(true);this.setLocation(900, 50);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setResizable(false);public
19、 void searchfriend()User temp=new User();temp.ip=255.255.255.255;temp.port=8888;cmu.send(String.valueOf(usr.port)+-+Protocol.segment.search+-).getBytes(), temp);Overridepublic void actionPerformed(ActionEvent arg0) / TODO Auto-generated method stubObject src=arg0.getSource();if(src=chat)int index=su
20、blist.getSelectedIndex();if(index!=-1)if(friendsindex!=null)if(friendsindex.chatwnd=null)friendsindex.chatwnd=new Chatwindow(friendsindex,cmu);else if(src=refresh)for(int j=0;jmaxfriendnum;j+)if(friendsj!=null)if(friendsj.chatwnd!=null)friendsj.chatwnd.dispose();friendsj=null;currentnum=0;fnditem.cl
21、ear();inforinit();searchfriend();else if(src=quit)for(int j=0;jmaxfriendnum;j+)if(friendsj!=null)if(friendsj.chatwnd!=null)friendsj.chatwnd.dispose();friendsj=null;this.dispose();cmu.quit();public static void main(Stringargs)Main main=new Main();User:package mychat;import .InetAddress;import .Unknow
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 UDP 协议 局域网 即时 通信 软件设计 21
限制150内