毕业设计论文企业内部通信系统

上传人:沈*** 文档编号:141951013 上传时间:2022-08-24 格式:DOC 页数:21 大小:708.53KB
收藏 版权申诉 举报 下载
毕业设计论文企业内部通信系统_第1页
第1页 / 共21页
毕业设计论文企业内部通信系统_第2页
第2页 / 共21页
毕业设计论文企业内部通信系统_第3页
第3页 / 共21页
资源描述:

《毕业设计论文企业内部通信系统》由会员分享,可在线阅读,更多相关《毕业设计论文企业内部通信系统(21页珍藏版)》请在装配图网上搜索。

1、计算机信息工程学院本科毕业 本科毕业论文(设计) 企业内部通信系统第一章概论31.1开发背景31.2 课题现状31.3 毕业设计及论文的主要工作3第二章系统分析42.1 需求分析42.2 可行性分析42.21可行性要求42.22 成本可行性分析42.23 技术可行性分析4第三章系统设计53.1 系统目标53.2 系统功能53.3 数据库设计63.31数据库分析63.32企业内部通信系统的E-R图63.33数据库的结构设计73.4 主要模块的设计83.41主窗体模块设计83.42公共模块设计83.43系统托盘模块设计103.44系统工具模块设计103.45用户管理模块设计113.46通信模块设计

2、12第四章详细设计和代码实现154.1主要模块的实现过程154.2通信模块的实现过程20第五章总结22致谢23参考文献23Abstract23摘要: 本文设计一个类似飞鸽传书的企业内部通信系统,系统基于UDP/IP协议,使用 Java Swing、Java Socket和JavaDB数据库进行开发。系统实现了信息通信、系统设置、文件传输、访问公共资源、互访对方主机五大功能。本系统结构清晰、界面友好、操作简单、通用性强,可以大大提高了企业的工作效率。关键字:企业、信息通信、socket1概论1.1开发背景近几年,随着网络的迅速发展和全球信息化速度的加快,网络通信已经不算是新鲜事物了,但大多数网络

3、通讯需要借助Internet上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如浪费网络资源、遭遇到网络攻击、病毒的入侵等等。为了保证企业内部的通信安全,减少员工沟通和交流工作中遇见的种种问题,由于互联网上的网络通信工具给企业内部信息交流带来的不便,所以为了方便企业内部用户之间的沟通、保证企业内部局域网的安全,需要开发一个基于局域网的信息收发系统的即时通讯工具。1.2 课题现状企业内部通信系统是基于局域网的即时通信工具,可以说是一个internet通信工具的小规模版本,一般采用UDP或者TCP协议体系等来实现,开发技术已经比较成熟,国外的通信工具较有名的有ICQ、MSN Messe

4、nger、国产的QQ、新浪UC都实现了广域网的即时通信。在最近几年,国内的局域网通信工具较有代表性有飞鸽传书、飞秋,这两款软件的快速、实效、迷你、简单的特点受到了广大企业的好评。这些工具的实现方式具体细节不易得之,但它无非是利用各种平台上的网络通信接口,基于TCP/IP或者UDP/IP协议架构下的软件产品。对于一个企业内网,这些功能的实现相比于广域网更加简单。所以还是有很大研究价值的。2.系统分析2.1 需求功能分析本系统的设计目标是实现一个企业内部局域网通信系统,企业内部职工可以方便的进行交流,可以大大的提高职工的工作效率。根据企业对局域网通信的需求,本系统主要包括信息通信、用户搜索、访问公

5、共资源、访问对方主机、系统设置五大功能。各功能概述:信息通信:信息通信是企业内部通信系统的核心功能,它用于不同职工之间的通信,这种通信方式能够实现多个职工之间的通信,而不存在类似电话的占线问题,增加了任务分配的新方式,从而提高企业的工作效率。用户搜索:用户搜索用于搜索企业局域网内的其他用户,系统会根据用户所设置的IP搜索范围搜索所有计算机上的用户。访问公共资源:访问公共资源用于实现企业内部公共服务器上资源访问的功能。访问对方主机:访问对方主机用于两人聊天情况下对对方主机的访问和控制的功能。系统设置:系统设置用于设置用户界面、公共路径、公告栏等的功能。2.2数据库分析该系统是一个桌面应用程序,它

6、不像web应用那样需要配置到指定的服务器上,所以数据库和该系统应存在于同一计算机中,这样,不仅节省了开销,而且还提高了系统的安全性。该系统所用数据库为JAVADB数据库。由于该数据库的运行环境平台要求较低,一般的电脑都可以满足它的硬件条件。企业内部通信系统的E-R图该系统的实体包括用户和窗口位置两个实体,分别记录着通信窗口的绝对位置和用户的信息。 用户实体用户实体主要包括IP信息、PC名称、用户信息、系统信息等,它记录了搜索到的用户和所有的用户信息。用户实体的E-R图如下。 用户实体头 像提示文本用户信息IP地 址主机名称 图1用户实体E-R图窗体位置实体窗体位置实体记录着窗体最后的移动位置和

7、窗体大小等信息,主要包括窗体位置的横坐标和竖坐标(下图用X、Y轴坐标表示)、窗体的高度和宽度。它的E-R图如下所示:X坐标窗口实体Y坐标窗体高度窗体宽度图2窗体位置E-R图2.3 可行性分析2.3.1 技术可行性分析局域网通信系统的技术已经非常成熟,首先,从硬件上讲,计算机硬件速度现在已经不是问题,高速便捷的网络已经十分普遍,这些为本系统的运行打下坚实的基础。从软件的角度上讲,数据库技术已经相当成熟(目前用得比较多的有SQL Server, JavaDB等),并且处理能力也非常强,这为海量数据的存储和处理打下了坚实的基础,同时,使用java开发图形界面程序也相当普遍。有了这些技术的支持,我们成

8、功开发一个局域网通信系统没有任何技术风险。2.3.2 经济可行性分析经济可行性主要是对项目的经济效益进行评价。本系统开发完成后可缩减工作时间,提高工作效率,而且简单易操作,不需对使用人员进行培训,不管是在资金上还是效率上都能达到预期的效果。本系统开发经费对于企业在经济上是可以接受的,并且本系统实施后可以显著提高工作效率,有助于企业的信息化管理,所以为该企业内部通信系统在经济上是可行的。3.系统设计3.1 系统目标系统根据企业对内部通信系统的要求,本系统可以实现以下目标。 操作简单、界面简洁美观。 更方便访问企业公共资源。 及时显示企业公共信息。 在通信窗口显示对方IP信息。 局域网内网用户自动

9、搜索。 系统运行稳定、安全可靠。 3.2 系统功能系统功能结构图如下:企业信息通信系统信息通信系统设置用户搜索访问公共资源访问对方主机图 3系统功能结构图3.3 数据库结构设计在该系统中的数据库db_EQ包含两个数据表,分别为用户信息表tb_users和窗体位置信息表tb_location。 用户信息表用户信息表用来保存企业内的通信用户,表tb_users如下所示:1.用户信息表tb_users字段名数据类型是否为空是否主键默认值描 述I PVarchar(16)NOYES用户IPHostVarchar(30)YESNONULL主机名称NameVarchar(20)YESNONULL姓 名To

10、oltipVarchar(50)YESNONULL提示文本IconVarchar(50)YESNONULL头像图标 窗体位置信息表窗体位置表用来保存窗体的位置和大小,表tb_location如下所示:2.窗体位置信息表tb_location字段名数据类型是否为空是否主键默认值描 述xLocationIntYESNONULLX轴坐标yLocationIntYESNONULLY轴坐标heightIntYESNONULL窗体高度widthIntYESNONULL窗体宽度3.4 主要模块的设计本系统分六个模块:主窗体模块、公共模块、系统托盘模块、系统工具模块、用户管理模块和通信模块,其中通信模块是本系

11、统的核心模块。3.4.1主窗体模块设计主窗体界面是本系统的用户列表,它由用户列表、系统选项卡、公告提示等组成。其中系统选项卡用于切换不同的管理界面,包括系统设计和系统工具界面。主窗体的设计效果图如下所示:图4 主窗体界面示意图3.4.2公共模块设计在本系统的项目空间中,有部分模块是公用的,或者多个模块甚至整个系统的配置信息是被多个模块重复调用完成业务的逻辑。其中有关数据库的操作、连接数据库、创建本机IP的默认用户(并添加到数据库中)、从数据库中获取窗体位置和大小、添加或删除指定用户、更新用户信息等。3.4.3系统托盘模块设计系统托盘模块用于定义系统栏图标。本系统的主窗体是继承对话框窗体编写的,

12、该窗体在系统任务栏不会显示任务标题,如果主窗体最小化之后将会隐藏,这时必须使用快捷键或者系统托盘中的图标执行显示窗体的命令。系统托盘包含相应的菜单,右键点击会弹出选择菜单,菜单包括三个选项,分别是:“访问服务器”、“打开”、“退出”。图示如下: 图5系统托盘示意图3.4.4系统工具模块设计本系统的工具模块起到维护系统的作用,包括更换程序外观、。设置IP范围、用户搜索和系统更新、设置系统公告路径、设置公共程序路径、系统登录等功能。在该系统第一次运行的时,用户搜索功能可以搜索内部网络中所有正在运行的计算机。本系统工具模块中使用了Java的LookAndFeel外观技术,不同的外观中控件的外观也会不

13、同,就比如我们常用的电脑中,windows经典样式和windowsXP样式外观的按钮、列表、菜单、工具栏甚至窗体的外观都不相同。在本系统中提供了“当前系统”和“JAVA默认值”两个外观选项,其中“JAVA默认值”是Swing默认的外观,不需要特别设置,而“当前系统”外观需要使用相应的方法获取当前系统的外观名称,然后将该外观应用于默认的外观。效果图如下所示:图6系统工具界面示意图3.4.5用户管理模块设计用户管理模块类似于聊天软件的好友列表,其中包含所有用户信息,另外在用户名称上单击鼠标右键,会弹出相应的管理菜单,在该菜单中包含“添加用户”、“更名”、“删除用户”、“信使群发(在没有多选用户的情

14、况下无法进行信使群发)”、“访问主机资源”和“访问公共程序”,其中“访问主机资源”是访问该用户的共享文件夹。相应的运行效果如下:图7用户管理界面示意图3.4.6通信模块设计通信模块是本系统中的核心模块,它用于局域网内的用户之间的通信,而却这种通信方式能够实现多个用户之间的通信,不会存在像我们打电话一样时的占线问题,增加了任务分配的方式。本模块可以使用UDP协议和信史两种方式发送信息。我们通常所说的通信工具,都是采用的客户机/服务器(C/S)架构的,C/S结构是这样的一种结构:它包括一个客户机(或前端),一个服务器(或称后端),客户机的作用是访问和处理远程服务器上的数据,服务器的作用是接收和处理

15、客户机的数据请求。有时,可能有多个客户向同一个服务器同时请求服务,这就需要服务器决定怎样处理这些请求。Client/Server结构是当前数据库应用程序中极为流行的一种方式。尤其是网络技术的发展,使得当前很多系统都采用这种方式进行构造,其最大的优点是将计算机工作任务分别由客户端和服务器端来共同完成,这样有利于充分合理的利用系统资源。另外它的服务器端还可以将信息集中起来,任何客户机都可以通过访问服务器而获得所需的信息。Client/Server模型最终可归结为一种“请求/应答”关系。一个请求总是首先被客户发出,然后服务器总是被动地接收请求,返回客户需要的结果。在客户发出一个请求之前,服务进程一直

16、处于休眠状态。一个客户提出请求后,服务进程被“唤醒”并且为客户提供服务,对客户的请求做出所需要的应答。其工作示意图如下:图8 C/S模式下的网络拓扑图但是本系统如果要做成C/S架构的话,需要在局域网内设置一个服务器,而在企业局域网内,网络结构不是集中式的而是分布式的,可能没有一台机器来充当服务器这个角色,同样用服务器会增加本系统的设置难度,不符合本系统方便、快捷的特色,同时增加服务器后,所有数据都会经过服务器保存处理,需要有专人看管维护服务器,显得更麻烦。所以本系统采用每个程序自己既充当客户机,又充当服务器,自己来维护网络上的用户列表,每两个客户端进行连接的时候都直接连通而不用增设服务器中转。

17、示意图如下:图9 无公共服务器模式下的网络拓扑图当然,上述图示只是通信数据的一个流向示意图,不是真正的网络拓扑结构,也就是说其中的服务器可能只是装了服务器软件的一台普通工作站。在底层的数据流向中,也就是网络的物理连结,并非我们这个软件所能决定的,我们的所做都是在一个透明的数据通信层之上的。在该模块中,使用基于UDP协议的数据报和套接字实现计算机之间的信息通信。UDP(User Datagram Protocol)协议就是“用户数据报协议”,它是一种无连接的协议,在该协议进行数据传输时,发送方只需要知道对方的IP地址和端口号就可以发送数据了,并不需要进行连接,当远程主机端口号出于监听状态时,则U

18、DP必须出于连接状态。通信的聊天界面运行效果如下所示:图10 聊天界面示意图4.详细设计和代码实现4.1主窗体模块的实现过程主窗体实现部分包括创建主窗体和记录窗体位置。其中创建主窗体的步骤如下:(1)创建JXCFrame类,在类中创建窗体的对象,为窗体添加选项卡面板,并添加用户列表、系统工具、系统设置3个选项卡和状态栏标签、公告按钮等属性。在构造方法中初始化窗体上的控件。数据库操作类、首选项对象等属性,为窗体添加时间监听器、为公告信息按钮添加监听器等。(2)初始化Socket服务器,指定端口为1111,如初始化失败,则提示服务器端口被占用或本软件已运行,并退出本系统。用于接收其他用户发送的通信

19、信息。关键代码如下:try / 启动通讯服务端口ss = new DatagramSocket(1111); catch (SocketException e2) if (e2.getMessage().startsWith(Address already in use)showMessageDialog(服务端口被占用,或者本软件已经运行。);System.exit(0);(3) checkPlacard方法,用于检测系统公告,当公告路径中存在系统公告是,将从文件中获取完整信息,调用pushMessage()方法将信息压入公告信息栈中。关键代码如下:private void checkpac

20、ard() / 检测公告信息方法String placardDir = preferences.get(placardPath, null);if (placardDir = null) pushMessage(未设置公告路径);return;File placard = new File(placardDir);try if (placard.exists() & placard.isFile() StringBuilder placardStr = new StringBuilder();Scanner sc = new Scanner(new FileInputStream(placar

21、d);while (sc.hasNextLine() placardStr.append(sc.nextLine();pushMessage(placardStr.toString(); catch (FileNotFoundException e) pushMessage(公告路径错误,或公告文件不存在);(4)initUserInfoButton()方法用于初始化本地用户信息,并在主窗体左上角显示本地用户的头像和名称,会在用户更改本地用户名称时同步更新。(5) main()方法,本方法首先获取用户设置的界面外观,然后调用UIManager类设置指定的外观,生成主窗体对象。最后初始化服务器端

22、口和系统栏图标。以下为关键代码:public static void main(String args) try String laf = preferences.get(lookAndFeel, java默认);/获取用户选择的外观if (laf.indexOf(当前系统)-1)UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName();/设置外观EQ frame = new EQ();frame.setVisible(true);/显示窗体frame.SystemTrayInitial();/ 初始化系统栏frame

23、.server();/启动服务端口frame.checkPlacard();/检测系统公告 catch (Exception e) e.printStackTrace(); 记录窗体的位置步骤如下:为窗体添加监听器,当改变窗体的位置和大小时,将调用saveLocation()方法将窗体和位置大小保存到数据库中。saveLocation(),该方法中调用了DAO类中的updateLocation将窗体的位置和大小保存到数据库中。4.2公共模块的实现过程公共模块包括数据库操作类和系统工具类。其中DAO类主要负责有关数据库的操作,该类在构造方法中驱动并连接数据库,然后将构造方法设置为private私

24、有属性,通过静态的getdao()获取DAO类的实例对象,这是简单的单例模式。在连接数据库时,可以指定create参数为true直接创建数据库,但在此之前需要调用dbExist()方法判断数据库是否存在。Resource类是企业内部通信系统中的工具类,该类中的方法都是静态的,可以直接调用,而不用创建Resource类的实例对象。这些工具方法包括搜索用户的方法、登录公共资源的方法、信使群发的方法和单条信息发送的方法。4.3系统工具模块的实现过程(1)createSysToolPanel()方法,用于创建系统工具选项卡,在该选项卡中包括界面选择、用户搜索和系统操作3部分,其中系统操作用于程序更新,

25、它们都被添加到系统工具面板中,createSysToolPanel()方法必须设置好面板的布局和初始化工作。(2)在createSysToolPanel()方法中创建界面选择部分,该部分以列表控件显示了两种外观选择,当用户选择其中以种外观并单击“确定”按钮之后,选择外观会保存到首选项中,然后提示重新运行本软件。(3)在createSysToolPanel()方法中创建用户搜索部分,包括搜索列表、搜索进度条和“搜索新用户”3个控件,当单击“搜索新用户”按钮时,系统会根据用户在系统设置界面所设置的IP搜索范围搜索所有计算机信息,并创建相应的用户对象,然后保存到数据库中。(4)创建“搜索新用户”按钮

26、的事件监听器SearchUserActionListener类,调用Resource工具类的searchUsers()方法搜索指定IP范围内的所有用户。系统工具类中的searchUsers()方法,该方法用于搜索局域网内的通信用户,也就是搜索企业内的所有职工。本方法将获取用户指定的IP范围,并在该范围内搜索所有可以访问的计算机,如果用户没有指定IP范围,系统默认的是192.168.0.1-192.168.0.255。该方法的关键代码如下:try for (int l = ipsInt0; l = ipeInt0; l+) boolean b0 = l ipeInt0; / 记录第一层循环的条件

27、int k = l != ipsInt0 ? 0 : ipsInt1; / 从第二次循环以后k赋值0for (; b0 ? k 256 : k = ipeInt1; k+) boolean b1 = b0 | k ipeInt1; / 记录第二层循环的条件int j = k != ipsInt1 ? 0 : ipsInt2; / 从第二次循环以后j赋值0for (; b1 ? j 256 : j = ipeInt2; j+) boolean b2 = b1 | b1 ? j 256 : j ipeInt2;int i = j != ipsInt2 ? 0 : ipsInt3;for (; b2

28、 ? i 256 : i = ipeInt3; i+) if(!button.isSelected()progressBar.setIndeterminate(false);return;Thread.sleep(100);/线程休息100毫秒String ip = l + . + k + . + j + . + i;progressBar.setString(正在搜索: + ip);/取消进度条的滚动if (tree.addUser(ip, search)/添加新用户model.addElement(添加+ ip + );catch(Exception e) e.printStackTrac

29、e();4.4系统托盘模块的实现过程在JDK6.0中,AWT新增加了SystemTray类和TrayIcon类,它们可以在系统托盘区创建一个托盘程序。SystemTray类表示桌面右下角的系统托盘,系统托盘由运行在桌面上的所有应用程序共享,可以使用getSystemTray()方法获取系统托盘对象,该方法总是对每个应用程序返回相同的实例。并不是所有的操作系统都支持系统托盘,如果当前系统不支持托盘的话,该方法将自动抛出异常。为避免程序出现错误,在获取系统托盘实例之前,需要检查系统托盘是否支持。可以调用isSupport()来实现。Systemtray类可以包含一个或多个TrayIcon类的实例,

30、即系统栏图标,可以使用add()将它们添加到托盘,TrayIcon对象由图像、弹出菜单和一组相关监听器组成。创建系统托盘的关键代码如下:try String title = EQ通讯软件;/系统栏提示文本的标题String company = 吉林省XXX科技有限公司;/系统栏提示文本SystemTray sysTray = SystemTray.getSystemTray();/获取系统托盘对象Image image = Toolkit.getDefaultToolkit().getImage(EQ.class.getResource(/icons/sysTray.png);/ 系统栏图标t

31、rayicon = new TrayIcon(image, title + n + company, createMenu(); /创建系统栏图标对象trayicon.setImageAutoSize(true);/设置自动大小trayicon.addActionListener(new SysTrayActionListener();/添加监听器sysTray.add(trayicon);/添加系统栏图标到系统托盘trayicon.displayMessage(title, company, MessageType.INFO); catch (Exception e) e.printStac

32、kTrace();4.5用户管理模块的实现过程管理模块实现步骤如下:(1)创建UserTreeRanderer类,该类继承Jpanel类成为一个面板控件,同时该类也实现了TreeCellRenderer接口成为树节点的渲染器。该类的构造方法接受3个图标参数,分别用于树节点的打开、关闭和叶节点的图标。(2)在UserTreeRanderer类中的getTreeCellRendererComponent()方法,渲染树节点的界面样式。本方法获取主窗体的宽度,并使用该宽度设置节点的宽度,是节点与窗体同宽度,当选择某个节点时,该方法将使用指定颜色绘制节点的边框,以突出该节点被选择的效果。(3)创建Ch

33、atTree类,该类继承Jtree自定义的树控件,并且使用了之前定义的UserTreeRanderer树节点渲染器, sortUsers()方法,此方法是一个内部线程,该线程获取本地的IP地址,使用该地址从数据库中获取本地用户对象,并将本地用户设置在用户列表首位。然后从数据库中获取其它用户对象。使第一个用户处于被选择状态,并更新状态栏的用户人数。关键代码如下:private synchronized void sortUsers() /排序用户列表new Thread(new Runnable() public void run() try Thread.sleep(100);root.rem

34、oveAllChildren();String ip = InetAddress.getLocalHost().getHostAddress(); /获取本地IPUser localUser = dao.getUser(ip);/从数据库中获取自己的信息if (localUser != null) / 把自己显示在首位DefaultMutableTreeNode node = new DefaultMutableTreeNode(localUser);root.add(node);userMap = dao.getUsers();Iterator iterator = userMap.iter

35、ator();while (iterator.hasNext() / 遍历用户集合User user = iterator.next();if(user.getIp().equals(localUser.getIp()continue;root.add(new DefaultMutableTreeNode(user);/添加用户到根节点treeModel.reload();ChatTree.this.setSelectionRow(0);/使第一个节点被选择if (eq != null)eq.setStatic(总人数: + getRowCount();/更新状态栏标签 catch (Exce

36、ption e) e.printStackTrace();).start();(4)在ChatTree中的delUser()方法,用于删除当前用户列表中选择的用户对象。该方法首先获取选择的树节点,从该节点中获取绑定的用户对象,经用户确认后删除用户信息,最后调用根节点的remove()方法删除该用户节点。另外是addUser()方法,用于在用户列表中添加新用户。本方法首先使用传递的IP参数到数据库中获取对应的用户对象,如成功获取,说明数据库已存在该用户,系统会提示“已存在”,当确定该IP可以访问后,为该IP地址创建一个新的用户并添加到数据库中。关键代码如下:public boolean addU

37、ser(String ip, String opration) / 添加用户try if (ip = null)return false;User oldUser = dao.getUser(ip);/从数据库中获取IP相同用户if (oldUser = null) / 如果数据库中不存在该用户InetAddress addr = InetAddress.getByName(ip);/该用户可以访问if (addr.isReachable(1500) String host = addr.getHostName();/获取它的主机名称root.add(new DefaultMutableTre

38、eNode(new User(host, ip);User newUser = new User();/创建新用户对象newUser.setIp(ip); /设置IPnewUser.setHost(host);/设置主机名称newUser.setName(host);/设置用户姓名newUser.setIcon(1.gif);/设置头像dao.addUser(newUser);/添加该用户到数据库中sortUsers();/用于重新加载用户列表if (!opration.equals(search)JOptionPane.showMessageDialog(EQ.frame, 用户 + hos

39、t+ 添加成功, 添加用户,JOptionPane.INFORMATION_MESSAGE);return true; else /如果该用户IP不可访问if (!opration.equals(search)JOptionPane.showMessageDialog(EQ.frame, 检测不到用户IP:+ ip, 错误添加用户, JOptionPane.ERROR_MESSAGE);/对话框提示错误return false; else /如果数据库中存在该IP用户if (!opration.equals(search) /并且不是系统自动搜索JOptionPane.showMessageD

40、ialog(EQ.frame, 已经存在用户IP + ip,不能添加用户, JOptionPane.WARNING_MESSAGE);/提示已存在!return false; catch (Exception e) e.printStackTrace();return false;4.6通信模块的实现过程(1) 创建TelFrame类,在该类中集成Jframe类实现Swing的窗体,定义窗体需要的所有控件,列入发送按钮、接受信息的文本框、输入发送信息的文本框、信使按钮以及各种滚动面板等,定义访问数据库的DAO实例,在通信窗口右侧显示的用户列表使用Dao实例从数据库中获取。(2)getInsta

41、nce()方法,用于获取唯一的窗体实例。该方法创建的所有窗体实例都会保存到Map集合类的实例中,窗体的实例对象会一直保存在这个集合类中,并且用户再次打开已存在的窗体时,将直接从集合类中获取,不再创建新的窗体实例。关键代码如下:public static synchronized TelFrame getInstance(DatagramSocket ssArg,DatagramPacket dp, ChatTree treeArg) String tmpIp = dp.getAddress().getHostAddress();/获取数据报的IP地址if (!instance.contains

42、Key(tmpIp) /如果集合中不存在该用户窗体TelFrame frame = new TelFrame(ssArg, dp, treeArg);/创建窗体实例instance.put(tmpIp, frame);/将窗体实例保存到集合中frame.receiveInfo(treeArg);/接受信息if (!frame.isVisible() /如果窗体处于隐藏状态frame.setVisible(true);/显示窗体frame.setState(JFrame.NORMAL);frame.toFront();/将窗体放置在最前端return frame; else /如果集合中包含该用

43、户窗体TelFrame frame = instance.get(tmpIp);/从集合中获取该窗体实例frame.setBufs(dp.getData();frame.receiveInfo(treeArg);/接受信息if (!frame.isVisible() frame.setVisible(true);/显示窗体frame.setState(JFrame.NORMAL);frame.toFront();return frame;(3)在构造方法中初始化TelFrame类的所有控件属性,该构造方法接收DatagramSocket、DatagramPacket和chatTree类的三个参

44、数,他们分别是数据socket服务、数据报和用户列表的实例对象。(4)receiveInfo()方法,用于接收其它用户发送的通信信息。该方法中首先从数据报中获取发送信息的用户IP地址,然后从数据库中获取该IP用户的姓名,同时将这些用户IP、用户姓名和发送时间以蓝色字体显示到信息文本框中,最后将数据报中的通信信息文本追加到信息文本框中。代码如下:private void receiveInfo(final ChatTree tree) / 接收信息if (buf.length 0) String rText = new String(buf).replace( + (char) 0, );Str

45、ing hostAddress = dp.getAddress().getHostAddress();String info = dao.getUser(hostAddress).getName();info = info + ( + new Date().tolocaleString()+”)”appendReceiveText(info, Color.BLUE);appendReceiveText(rText + n, null);(5)创建“发送”按钮的事件监听器sendActionListener类,它实现了ActionListener接口,拥有处理按钮事件的能力,它在actionPe

46、rformed()方法中获取数据报中的通信信息。创建MessageButtonAction内部类,该类是“信使”按钮的事件监听器。当用户输入通信信息并单击“信使”按钮时,监听器则调用sendMessage()方法将通信信息以系统信使方式发送到对方的计算机。关键代码如下:class sendActionListener implements ActionListener public void actionPerformed(final ActionEvent e) String sendInfo = getSendInfo();/获取发送信息if (sendInfo = null)return

47、;insertUserInfoToReceiveText(tree);appendReceiveText(sendInfo + n, null);/添加到信息文本框byte tmpBuf = sendInfo.getBytes();DatagramPacket tdp = null; /创建数据报try tdp = new DatagramPacket(tmpBuf, tmpBuf.length,new InetSocketAddress(ip, 1111);/初始化数据报ss.send(tdp); /发送数据报 catch (SocketException e2) e2.printStack

48、Trace(); catch (IOException e1) e1.printStackTrace();JOptionPane.showMessageDialog(TelFrame.this, e1.getMessage();sendText.setText(null);/清空发送文本框sendText.requestFocus(); /使发送文本框获得焦点if (messageMode.isSelected()/如果选择了“消息模式”复选框setState(ICONIFIED);/则窗体会最小化5.总结在当今电脑网络发达的世界当中,一个简单有效地局域网通信工具是如此的实用,所以我们应当重视

49、对它的相关研究与开发。在本次毕业设计中,我应用了JAVA开发工具在windows平台上开发了一个企业内部通信系统,在这一方面得到了实践,不管是是动手能力、还是查阅资料,都起到了很大的有益之处。在本次设计中,我充分认识到了JAVA高效的开发能力和windows的易用性。另外,我在这次设计中看到了自己的不足之处,在开始的时候,感觉逻辑复杂,难以控制,因此至今还有许多没能解决的问题,比如系统的功能中的文件传输功能就没有实现,因为没有做真正的系统设计,甚至连毕业设计这样的系统都没有做过,所以很多地方都是自己临时学习的,大大影响了本设计的开发进度。虽然只实现了通信聊天的功能,但整个过程是令我欣慰而充实的

50、既然毕业设计已经接近尾声,虽然有很多的功能没有实现,没有对系统预想时的那么全面,不过经过1个多月的努力,终于初见雏形,并完成了本次的论文写作,我希望自己能以良好的心态顺利毕业,走向大千社会。致谢首先,我要感谢我的指导老师都艺兵老师,在毕业设计期间给了我悉心的关怀和帮助,并且给了我许多关键的,建设性的指导。同样也感谢给我帮助的朋友和同学。我在大学里基本上没有做过什么系统,不过也很感谢这次设计让我真正的了解了计算机,让我看到原来大学里学的基础知识知识IT中的冰山一角,它的知识博大精深。也让我看到了能用计算机来解决沉重而低效的手工管理更成为了今后的发展趋势。由于时间的紧迫,我虽然没有将设计完成的尽善

51、尽美,但我会努力的研究下去,对系统进一步的修改和完善。最后请再次让我向帮助我的老师、同学和朋友表示衷心的感谢。参考文献【1】刘长炯.MyEclipse6Java开发中文教程M.电子工业出版社,2007年12月 【1】印雯. Java语言与面向对象程序设计M.清华大学出版, 2000年09月【3】Swing ,David M.Geary.Java图形设计M. 机械工业出版社, 2000 年2月【4】李钟蔚,Java开发实战宝典 清华大学出版社,2010年1月【5】 霍顿.Java2入门经典(JDK5)M. 机械工业出版社,2006年4月 Design and Implementation of

52、internal comunication system for enterpriseli xiaAbstract:This article designs a LAN communications software for enterprise like Flying, and this system is based on UDP/IP, using Java Swing, Java Socket and JavaDB database to make development. This system realizes five functions including the inform

53、ation communication, system settings, file transfer, visit the public resources and other host visits,This system structure is clear, friendly interface ,easy to operate. strong universability, it could be greatly improve the efficiency of enterprises.Keywords:Enterprise Information communication Socket21

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!