局域网内跨平台通讯工具毕业设计论文word格式

上传人:仙*** 文档编号:78736788 上传时间:2022-04-22 格式:DOC 页数:70 大小:570.02KB
返回 下载 相关 举报
局域网内跨平台通讯工具毕业设计论文word格式_第1页
第1页 / 共70页
局域网内跨平台通讯工具毕业设计论文word格式_第2页
第2页 / 共70页
局域网内跨平台通讯工具毕业设计论文word格式_第3页
第3页 / 共70页
点击查看更多>>
资源描述
局域网内跨平台通讯工具的基本实现(设计)学 生:刘 银 指导老师:曾碧翼 (湖南农业大学信息科学技术学院,长沙 410128)摘 要:随着网络的一天天兴起,即时聊天已经成为人们生活中不可缺少的一部分,如QQ、MSN。但在现实生活中,很多公司为了公司内部资料保密性,往往禁止员工使用MSN、QQ等即时聊天工具,但工作的交流是必不可少的,开发一个局域网内且跨平台的即时聊天工具,有利于使用不同操作系统的工作人员之间的交流、提高工作人员的工作效率。利用局域网即时聊天工具可以实现在局域网里更便捷的联系,进行文件传输、消息的发送,不用上Internet网,可以极大地节省资源。 关键词:XML语言; 套接字;即时通讯;LAN CROSS-PLATFORM COMMUNICATIONS TOOLS OF Basically ACHIEVEDStudent:LiuYin Tutor:ZengBiyi(College of Information Science And Technology, Hunan Agricultural University, Changsha 410128, China)Abstract: With a network of daily rise of instant chat has become a matter of life indispensable part as QQ, MSN. But in real life, many companies within the company to the confidentiality of information, often prohibit the use of staff MSN, QQ real-time chat tool, but the exchange is essential, development of a LAN and cross-platform chat tool to the use of different systems of personnel exchanges between the staff to improve efficiency. Use LAN chat tool in LAN can be achieved for a more convenient connections, file transfer, message delivery, not on the Internet, can significantly save resources. network Key words: XML; Socket; Instant messaging; 摘要 关键字1 前言11.1 课题背景11.2 课题目标11.3 本文的组织结构22 国内外研究情况以及相关介绍32.1 使用情况32.2 XML介绍32.3 Socket介绍43 需求分析53.1 功能概要53.2 详细功能54 系统设计64.1 设计概要64.1.1 好友管理流程64.1.2 消息接收发送流程74.1.3 文件发送接收流程84.2 基类包的设计104.3 网络类包的设计114.4 控制类包的设计114.5 显示类包的设计115 系统实现125.1 网络类包的实现125.2 控制类包的实现125.3 显示类包的实现126 设计的优缺点及其扩展方向13 参考文献 致谢局域网内跨平台通讯工具的基本实现(设计)学 生:刘 银 指导老师:曾碧翼 (湖南农业大学信息科学技术学院,长沙 410128)摘 要:随着网络的一天天兴起,即时聊天已经成为人们生活中不可缺少的一部分,如QQ、MSN。但在现实生活中,很多公司为了公司内部资料保密性,往往禁止员工使用MSN、QQ等即时聊天工具,但工作的交流是必不可少的,开发一个局域网内且跨平台的即时聊天工具,有利于使用不同操作系统的工作人员之间的交流、提高工作人员的工作效率。利用局域网即时聊天工具可以实现在局域网里更便捷的联系,进行文件传输、消息的发送,不用上Internet网,可以极大地节省资源。 关键词:XML语言; 套接字;即时通讯;LAN CROSS-PLATFORM COMMUNICATIONS TOOLS OF Basically ACHIEVEDStudent:LiuYin Tutor:ZengBiyi(College of Information Science And Technology, Hunan Agricultural University, Changsha 410128, China)Abstract: With a network of daily rise of instant chat has become a matter of life indispensable part as QQ, MSN. But in real life, many companies within the company to the confidentiality of information, often prohibit the use of staff MSN, QQ real-time chat tool, but the exchange is essential, development of a LAN and cross-platform chat tool to the use of different systems of personnel exchanges between the staff to improve efficiency. Use LAN chat tool in LAN can be achieved for a more convenient connections, file transfer, message delivery, not on the Internet, can significantly save resources. network Key words: XML; Socket; Instant messaging; 1 前言1.1 课题背景二十一世纪的一些重要特征应该包括以下三个方面:数字化、网络化和信息化,它是一个以网络为核心的信息时代。随着网络的一天天兴起,即时聊天已经成为人们生活中不可缺少的一部分。即时聊天通过网络进行实时的沟通从实时性和有效性上都超过了用信件和E-mail并且在费用上要低于电话。据调查显示,即时聊天工具的市场份额每年都在飞速增加,而电子邮件等工具的市场在渐渐减少。现在,企业、机关、学校都建立起了自己的局域网,在局域网中虽然可以通过文件共享的方式进行通讯,但使用这种方式是非常不方便的。首先,在局域网里的网上邻居,只能看到机器名,不清楚对方是谁也不知道对方机器里有什么资源可以共享。而且当局域网的机器很多时,这种方式更加繁琐。目前国内外有很多成功的即时聊天工具虽然能有效的解决这一问题,但在现实生活中,很多公司为了公司内部资料保密性,往往禁止员工使用MSN、QQ等即时聊天工具,但工作的交流是必不可少的,开发一个局域网内的即时聊天工具,有利于工作人员之间的交流、提高工作人员的工作效率。利用局域网即时聊天工具可以实现在局域网里更便捷的联系,进行文件传输、消息的发送,不用上Internet网,可以极大地节省资源。1.2 课题目标在本课题中主要实现以下目标:1.实现局域网内的消息传送;2.实现局域网内的文件传输;3.实现好友列表的管理;4.可以实现多线程操作;5.系统要能长时间无故障运行;6.系统的操作要求简单1.3 本文的组织结构【摘要】本设计课题用JAVA语言设计即时通讯系统是为了更好的满足人们的网上聊天和彻底的实现两台计算机之间点对点的信息交流的需求提出来的,也是当今网络迅速发展的结果。本论文共分为七部分.第一部分简单的分析了本即时通讯系统开发的可行性,并重点对技术可行性(选择JAVA)做了详细分析;第二部分借助数据流图和数据字典对系统的功能和性能进行了详细的需求分析,建立了系统的逻辑结构;第三部分用结构图和层次输入输出处理图,建立了系统的总体结构;第四部分采用了过程设计语言对系统的各个功能模块进行了详细设计;第五部分用JAVA语言编码实现了本系统,并对系统的功能进行了简要的测试和调试;第六部分为系统测试部分,对系统的功能进行了全面测试;最后是此次设计的结论总结及部分参考文献。2 国内外研究情况以及相关介绍2.1 使用情况目前,在国内外都有许多相关的工具,比如windows自带的NetMeeting,就能很好地实现局域网内即时聊天。国内也有很多相关的局域网即时聊天工具能够实现局域网内即时聊天,比如腾讯公司的RTX。这些工具使用套接字进行网络连接,实现好友之间消息传送、文件传输等功能。这些工具大部分可以使用UDP和TCP两种连接方式,可以实现Windows平台下的消息传送和文件传输,但对于跨平台的消息传送和文件传送,比如Windows和Linux之前的消息传送和文件传输这些工具就不能很好的实现。实现局域网跨平台的即时聊天,实现利用套接字实现Windows和Linux之间的消息传送和文件传输,有利于学校、公司等内部员工之间不同平台之间的即时聊天和消息传送。2.2 XML介绍XML 起源于SGML ( Standard Generalized Markup Language) 。SGML 是用于定义怎样描述不同种类的电子文档的数据的结构和内容的一种语言标准。它产生于三十年以前,是由国际标准化组织负责制定和管理的。XML 是SGML 的一个简化版本:它去除了SGML中一些非常复杂而又用得很少的特性,使其更加精炼、简洁,更易于理解和使用,从而更适合在网络环境下使用。虽然两者有所不同,但它们设计的目标都是一致的:提供一种标准来描述在一篇文档中数据是如何组织和存放的。由于XML脱胎于SGML,它在许多方面都很类似于SGML,并利用了许多SGML的设计结果,但XML强调的是描述数据内容的组织存放结构。可以使用XML来定义在数据文件中数据的组织和安排。通过这些组织结构信息,不同的数据使用者可以将其关心的数据内容提取出来,用于各自的目的。当初数据库提出的思想就是为了将数据以独立于数据使用目的方式存放,以达到被不同的应用程序使用的目的。在这里可以看到,XML与数据库有异曲同工之妙,只不过XML是应用在提高网络上的数据可重用性和数据交换的效率方面。XML是一种使用标记以传输信息的简单方法。标记用于界定内容,而XML的语法允许自行定义任意复杂度的结构。XML完全使用普通的文本,而不是二进制的数据格式来实现的,这对于跨平台交换数据来说确实是一个非常不错的方案。实际上,每一种普通的操作系统能够以某种方式处理文本。这也是HTML之所以能够在很短的时间内流行起来的原因。XML把这一优势提高到一个更新的层次,因为使用者可以根据自己的需要任意地扩展XML。由于这种扩展机制是标准化的,所以可以自动地将这类扩展信息传递给任何读取数据的人编程者或机器。从前面的介绍,可以了解到XML有以下优点:1.XML提供了一种功能强大、灵活高效地表达数据内容的方法。2.XML具有很强的可扩展性(通过定义新的DTD) 。3.XML 中的数据内容与具体应用无关,这使得用它表示的数据具有很好的使用效率和可重用性,这一点在通过网络交换数据时表现得更为明显。可以说,XML是一种可以用于Web上的标准的、可扩展的数据格式描述语言。它可以描述各种各样结构的信息,并且由于它的数据内容独立性原则和可自解释性,使得用它表示的数据信息可以很方便地被不同的数据使用者使用。XML 的出现使得网上数据的使用效率大大地提高。目前有关XML 的研究与应用正在如火如荼地进行着。可以预见在不远的将来XML 将成为网上数据交换的标准并得到广泛地使用。2.3 Socket介绍3 需求分析3.1 功能概要本系统主要包括发送接收消息、发送接收文件、好友管理、查看聊天记录等几个功能,其功能图如下:图3-1:系统功能图3.2 详细功能4 系统设计4.1 设计概要设计者分析需求之后,认为系统中主要流程如下:4.1.1 好友管理流程图4-1 好友管理流程图这里介绍流程4.1.2 消息接收发送流程图4-1 消息接收发送流程图这里介绍流程4.1.3 文件发送接收流程图4-3 文件发送接收流程图这里介绍流程4.1.4 基本包的设计根据需求和以上流程图,设计者把系统分为三个模块:消息以及文件的传送和接收、好友管理、以及聊天记录查看。根据这三个模板,设计者把系统分为五个主要包,设计如下图:图4-1 系统主要构架图基类包(model):主要包括系统所使用基类,如文件类、好友类、好友分组类。在这些类中,实现的值的设置和读取方法以及一些相关操作方法。网络包(net):主要包括实现网络的连接以及消息、文件的传送所使用的类。通用值包(common):这个包中包含一个类,类主要用于读取一些基本值的设置,如本机IP、聊天端口、本人昵称好友保存地址等信息。控制包(business):主要包括系统处理的一些类,如消息处理类、好友管理处理类、聊天记录处理类。在这些类中,主要处理如消息发送和接收、好友添加与删除、聊天记录的保存等功能。显示包(frame):主要包括系统显示的一些类,如主界面类、聊天窗口类、好友管理窗口类以及一些自定义的显示类。4.2 基类包的设计这里介绍基类包Friend 包中实现的功能:public Friend() this.port = Const.MSG_PORT; 根据ip初始化该类 /* * 构?函? * param ip String * param name String */ public Friend(String ip, String name) this.ip = ip; this.name = name; this.port = Const.MSG_PORT; 根据ip地址,名字name初始化该类 /* * 构?函? * param ip String * param port int */ public Friend(String ip,int port) this.ip = ip; this.port = port; 根据ip地址和端口初始化该类 /* * 构?函? * param ip String * param name String * param msgInPort int */ public Friend(String ip, String name, int msgInPort) this.ip = ip; this.name = name; this.port = msgInPort; 根据ip地址,名字,端口初始化该类 /* * 构?函? * param ip String * param msgInPort int * param nickname String */ public Friend(String ip, int msgInPort, String nickname) this.ip = ip; this.nickname = nickname; this.port = msgInPort; 根据ip地址,端口,名字初始化该类 /* * getName * return String * uml.property name=name */ public String getName() return name; 返回给类中的好友名字 /* * getPort * return int * uml.property name=port */ public int getPort() return port; 返回给类中的好友的端口 /* * getIp * return String * uml.property name=ip */ public String getIp() return ip;返回给类中的好友的ip /* * getNickname * return String * uml.property name=nickname */ public String getNickname() return nickname; 返回好友的呢称 /* * setName * param name String * uml.property name=name */ public void setName(String name) this.name = name; 设置好友的名字 /* * setPort * param msgInPort int * uml.property name=port */ public void setPort(int port) this.port = port; 设置好友的端口 /* * setIp * param ip String * uml.property name=ip */ public void setIp(String ip) this.ip = ip; 设置好友的ip /* * setNickname * param nickname String * uml.property name=nickname */ public void setNickname(String nickname) this.nickname = nickname; 设置好友的呢称 /* * equals * param friend Friend * return boolean */ public boolean equals(Friend friend) return ip.equals(friend.ip) & port = friend.port; 判断本类中的好友是否就是friendFileSend类public FileSend() / 设定文件编号 this.fileNo = +FileCount; this.name = ; this.fileLength = 0; this.savaPath = ; /* * 取得保存地址? getSavaPath * return String * uml.property name=savaPath */ public String getSavaPath() return savaPath; /* * 取得文件名: getName * return String * uml.property name=name */ public String getName() return name; /* * 设置文件大小? setFileLength * param fileLength long * uml.property name=fileLength */ public void setFileLength(long fileLength) this.fileLength = fileLength; /* * 设置保存目录? setSavaPath * param savaPath String * uml.property name=savaPath */ public void setSavaPath(String savaPath) this.savaPath = savaPath; /* * 设置文件名: setName * param name String * uml.property name=name */ public void setName(String name) this.name = name; /* * 设置文件目录 * param path String * uml.property name=path */ public void setPath(String path) this.path = path; /* * 设置文件编号 * param fileNo int * uml.property name=fileNo */ public void setFileNo(int fileNo) this.fileNo = fileNo; /* * 取得文件长度 * return long * uml.property name=fileLength */ public long getFileLength() return fileLength; /* * 取得文件目录 * return String * uml.property name=path */ public String getPath() return path; /* * 取得文件编号 * return int * uml.property name=fileNo */ public int getFileNo() return fileNo; /* * 取得文件总数 * return long */ public long getFileCount() return FileCount; FileSort类 public FriendSort() public FriendSort(String name) this.name = name; /* * 分组内好友数 * return int */ public int length() return list.size(); /* * 添加好友 * param friend Friend */ public void add(Friend friend) list.add(friend); /* * 取得 index 位置好友 * param index int * return Friend */ public Friend getFriend(int index) return this.list.get(index); /* * 删除分组中的好友 * param friend Friend */ public void removeFriend(Friend friend) for(int i = 0; i list.size(); i+) if(friend.equals(list.get(i) list.remove(i); return; /* * 修改分组中好? * param old Friend * param newFriend Friend */ public void changeFriend(Friend old, Friend newFriend) for(int i = 0; i list.size(); i+) if(old.equals(list.get(i) list.set(i,newFriend); return; /* * 判断好友是否存在 * param friend Friend * return boolean */ public boolean isExist(Friend friend) int length = list.size(); for(int i = 0; i length; i+) if(friend.equals(list.get(i)return true; return false; /* * 通过 IP ? 端口取得好友 * param friend Friend * return Friend */ public Friend getFriendByPort(Friend friend) int length = list.size(); for (int i = 0; i length; i+) if (friend.equals(list.get(i) return list.get(i); return null; /* * 取得好友的下? * param friend Friend * return int */ public int getIndex(Friend friend) int length = list.size(); for (int i = 0; i length; i+) if (friend.equals(list.get(i) return i; return -1; /* * 设置好友分组? * param name String * uml.property name=name */ public void setName(String name) this.name = name; /* * 取得好友分组? * return String * uml.property name=name */ public String getName() return name;History类/* * 根据时间,发送者,接收者,信息体来构造该类 * param time String * param sendUser String * param receiveUser String * param message String */ public History(String time,String sendUser, String receiveUser, String message) this.time = time; this.sendUser = sendUser; this.receiveUser = receiveUser; this.message = message; /* * 根据时间,发送者,信息体来构造该类 * param time String * param sendUser String * param message String */ public History(String time, String sendUser, String message) this.time = time; this.sendUser = sendUser; this.receiveUser = ; this.message = message; /* * 返回时间 * uml.property name=time */ public String getTime() return time; /*返回发送者 * return the sendUser * uml.property name=sendUser */ public String getSendUser() return sendUser; /* * 返回接收者 * return the receiveUser * uml.property name=receiveUser */ public String getReceiveUser() return receiveUser; /*设置信息体 * param message the message to set * uml.property name=message */ public void setMessage(String message) this.message = message; /*设置时间 * param time the time to set * uml.property name=time */ public void setTime(String time) this.time = time; /*设置发送者 * param sendUser the sendUser to set * uml.property name=sendUser */ public void setSendUser(String sendUser) this.sendUser = sendUser; /*设置接收者 * param receiveUser the receiveUser to set * uml.property name=receiveUser */ public void setReceiveUser(String receiveUser) this.receiveUser = receiveUser; /*返回消息 * return the message * uml.property name=message */ public String getMessage() return message;FriendSort类public FriendSort() /* * 根据名字来构造好友分组 * param name */ public FriendSort(String name) this.name = name; /* * 分组内好友数 * return int */ public int length() return list.size(); /* * 添加好友 * param friend Friend */ public void add(Friend friend) list.add(friend); /* * 取得 index 位置好友 * param index int * return Friend */ public Friend getFriend(int index) return this.list.get(index); /* * 删除分组中的好友 * param friend Friend */ public void removeFriend(Friend friend) for(int i = 0; i list.size(); i+) if(friend.equals(list.get(i) list.remove(i); return; /* * 修改分组中好? * param old Friend * param newFriend Friend */ public void changeFriend(Friend old, Friend newFriend) for(int i = 0; i list.size(); i+) if(old.equals(list.get(i) list.set(i,newFriend); return; /* * 判断好友是否存在 * param friend Friend * return boolean */ public boolean isExist(Friend friend) int length = list.size(); for(int i = 0; i length; i+) if(friend.equals(list.get(i)return true; return false; /* * 通过 IP ? 端口取得好友 * param friend Friend * return Friend */ public Friend getFriendByPort(Friend friend) int length = list.size(); for (int i = 0; i length; i+) if (friend.equals(list.get(i) return list.get(i); return null; /* * 取得好友的下? * param friend Friend * return int */ public int getIndex(Friend friend) int length = list.size(); for (int i = 0; i length; i+) if (friend.equals(list.get(i) return i; return -1; /* * 设置好友分组? * param name String * uml.property name=name */ public void setName(String name) this.name = name; /* * 取得好友分组? * return String * uml.property name=name */ public String getName() return name;4.3 网络类包的设计NetProcess类 private ServerSocket serverSocket; private MessageManage messageManage = null; /* * 构造函数 */ public NetProcess() try this.serverSocket = new ServerSocket(Const.MSG_PORT, 200); catch (IOException ex) this.serverSocket = null; ex.printStackTrace(); public void run() receiveMsg(); /* * 接收消息或文? */ public void receiveMsg() while(true) Socket socket = null; try socket = this.serverSocket.accept(); System.out.println(?始接收消?); NetMessage netMessage = new NetMessage(socket); netMessage.setNetProcess(this); netMessage.start(); catch (IOException ex) ex.printStackTrace(); /* * 根据好友取得 Socket * param friend Friend * return Socket */ public Socket getSocket(Friend friend) Socket socket = null; try System.out.println(发?数?); socket = new Socket(friend.getIp(), friend.getPort(); return socket; catch (ConnectException e) e.printStackTrace(); return null; catch (IOException ex) ex.printStackTrace(); return null; /* * 根据 Socket 取得 OutputStream * param socket Socket * return OutputStream */ public OutputStream getOutputStream(Socket socket) if(socket = null) return null; try
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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