收藏 分享(赏)

基于java的判断dtu超时功能的研究与设计毕业论文设计.doc

上传人:无敌 文档编号:632861 上传时间:2018-04-15 格式:DOC 页数:36 大小:691KB
下载 相关 举报
基于java的判断dtu超时功能的研究与设计毕业论文设计.doc_第1页
第1页 / 共36页
基于java的判断dtu超时功能的研究与设计毕业论文设计.doc_第2页
第2页 / 共36页
基于java的判断dtu超时功能的研究与设计毕业论文设计.doc_第3页
第3页 / 共36页
基于java的判断dtu超时功能的研究与设计毕业论文设计.doc_第4页
第4页 / 共36页
基于java的判断dtu超时功能的研究与设计毕业论文设计.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、安 徽 农 业 大 学毕 业 论 文(设计)论文题目 基于 java 的判断 DTU 超时功能的研究与设计 姓 名 詹 步 康 学 号 09101009院 系 信息与计算机学院 专 业 通信工程指导教师 张武 职 称 副教授中国合肥二 o 一三 年 五 月安徽农业大学学士学位论文(设计)开题报告课题名称 基于 java 的农业物联网中间件的判断DTU 超时功能的研究和设计 课题来源 导师指定学生姓名 詹步康 专业 通信工程 学号 09101009指导教师姓名 张武 职称 副教授研究内容1 研究分析 DTU 超时功能的作用。2 对 DTU 超时功能的应用原理进行分析:1)DSC 启动定时器轮询并

2、获取用户最后一次与 DSC 通讯的时间。2)获取当前时间并与最后一次登录时间比较,取其差值。3)该值超过事先定值则断开用户 DTU 与 DSC 数据中心的连接。3 对以上工作过程的需要进行编程并进行模拟测试。研究计划3 月初3 月中 调研、查资料。3 月中4 月初 研究并分析超时功能的作用及其应用原理。4 月中5 月初 构建系统框架,编程。5 月初5 月中 对系统进行调试、运行并修改。5 月中 撰写毕业设计论文。特色与创新 系统稳定,抗干扰能力强 应用该功能可以节省不必要的流量花费指导教师意见教研室意见学院意见2基于 java 的农业物联网中间件的研究判断 DTU 超时功能的研究和设计学生:詹

3、步康 指导教师:张武(安徽农业大学 信息与计算机学院 合肥 230036)摘要: 本课程设计运用了所学的Java语言基础知识,面向对象程序设计的基本思想、方法与技术,网络通信编程技术等开发了简单应用功能-基于java的农业物联网中间件的判断DTU超时功能。详细地介绍了本课程设计运用了所学的Java语言基础知识,面向对象程序设计的基本思想、方法与技术,网络通信编程技术等开发了简单应用功能-基于java的农业物联网中间件的判断DTU超时功能。详细地介绍了基于java的农业物联网中间件的判断DTU超时功能的设计方法,给出了该功能的java程序设计,该程序可直接用作服务器端程序,接受并处理数据。服务器

4、端数据中心与客户端DTU通过Socket建立连接,利用输入输出流透明传送数据。服务器端程序主要包括节点类、工作线程类(接受并处理数据所用)、轮询类等,以及用于存储节点的哈希表、同步锁和支持多客户端的线程;客户端程序主要有计时器类(每隔一定时间向服务器端发送一数据)。关键词:DTU;超时;轮询Java-based Research of Internet of Things of Agriculture MiddlewareResearch and Design of Judgment of DTU Timeout Function Student: zhan bu kang teachers:

5、 Zhang Wu(School of Information Client program mainly include the timer class (sending a data at regular intervals to the server).Keywords:DTU;timeout ;polling3目录1 引言 .32.课题的总体目标与主要研究内容 .42.1 课题的总体目标 42.2 研究的主要内容 42.2.1 下面就本课题所做的工作的主要内容 42.2.2 本论文的章节安排 43 总体设计 .43.1 需求分析与设计思想: 43.1.1 对判断 DTU 超时功能的需求

6、分析 43.1.2 对判断 DTU 超时功能的设计思想 43.2 设计时用到的重要的技术或数据结构 53.2.1 同步锁 53.2.2 哈希表 73.2.3 线程 84 程序的详细设计 .104.1 程序流程图 104.2 数据字典 114.2.1 主类 Server 114.2.2 启动服务器 StartServer124.2.3 节点类 Node 134.2.4 工作线程 WorkThread 144.2.5 轮询类 LookUp154.2.6 客户端类 Client164.2.7 工作计时器类 MyTask 165 结论: .17主要参考文献 .17致谢 .18附录 1: .18附录 2

7、 .312.1 运行结果及界面 3142.1.1 启动服务器前: 312.1.2 启动服务器但不启动客户端: 322.1.3 启动服务器并启动多个客户端: 332.1.4 启动服务器并启动多个客户端最后关闭全部客户端: 341 引言随着经济社会的不断发展和进步,无线通信技术在人们生活中已变得愈发重要,受到广泛运用。应用了无线通信技术的 GPRS DTU 遍布了人类生活各个领域,被广泛应用于电力、水利、市政、交通、金融、环境监测、农业等行业领域。尽管应用的行业不同,但应用的原理是相同的,大都是 DTU 和行业设备相连,然后和后台建立无线的通信连接。在农业监测系统中,常常需要对众多农业园的 CO2

8、 浓度,光照强度,土壤酸碱度等进行实时监测,大部分监测数据需要实时发送到管理中心的后端服务器进行处理。由于监测点分散,分布范围广,而且大多设置在环境较恶劣的地区,通过电话线传送数据往往事倍功半。通过 GPRS 无线网络进行数据传输,大大提高水文部门的工作效率,成为农场主、农业部门选择的通信手段之一。DTU 内嵌了 TCP/IP 协议栈,具有 Socket 通讯功能,并提供透明数据传输通道,用户只需设置一些参数就可实现将嵌入式系统直接与 Internet 相连,实现网络的互连互通。DTU 的主要功能是把远端设备的数据通过无线的方式传送到数据中心,在传送数据之前,DTU 需要与服务器端数据中心建立

9、无线连接。服务器端监控中心的 Socket 端口监听程序负责监听采集终端的连接请求,当监听到连接请求后,建立通信链路,原来负责监听Socket 仍进行监听,通信链路建立后就可任意交换数据了。当 DTU 长时间没有发送数据到数据中心时,那么数据中心就认为该 DTU 已掉线并断开与该 DTU 的连接。判断 DTU 超时功能是 DTU 众多功能之一,作用就是帮助数据中心及时发现那些不传送数据却仍然连接占用大量资源的 DTU,以便让有限的内存资源得到最大化利用。5图 1 DTU 及其使用示例2.课题的总体目标与主要研究内容2.1 课题的总体目标本课题的目标是,实现个判断 DTU 超时的功能,使用这个功

10、能可以使服务器很大程度上提高自己管理内存资源的能力。此功能应用于服务器后台上,能比较理想得保证通讯连接的时效性,避免了那些空占其位,不尽其守的 DTU。2.2 研究的主要内容2.2.1 下面就本课题所做的工作的主要内容1) 就具体的 DTU 设备进行调研,找出其工作原理,以何种方式发送数据等等。2) 编写服务器端接受数据的程序,能够从字节流里读取数据。3) 编写服务器端轮询程序,能够每隔一段时间检查一次各客户端是否掉线。2.2.2 本论文的章节安排第 2 章,提出了课题的总体目标与主要研究内容;第 3 章, 对判断 DTU 超时功能的总体设计,对设计有个宏观把握;第 4 章,对判断 DTU 超

11、时功能的具体设计,详细介绍了设计过程。第 5 章,针对本文的工作进行了总结以及提出不足之处。63 总体设计3.1 需求分析与设计思想:3.1.1 对判断 DTU 超时功能的需求分析在互联网日益发展的今天,DTU 的使用也越来越广泛,为各行业之间的信息、产业融合提供了帮助。可往往运用 DTU 的过程中难免会遇到令人不快的情况使得 DTU 无法正常向服务器发送数据,这些情况常见有:突然断电、DTU 本身电路故障、信号太弱、等等。服务器与众多 DTU 通讯时,可能某一 DTU 故障而无法向服务器发送数据,此时服务器还在默默等待该 DTU 传送的信息。大家都知道服务器根本接受不到该 DTU 发来的数据

12、,但是此时服务器还与该DTU 连接着,占着服务器宝贵的内存资源双方却不能正常通讯,显然这浪费资源,要是众多 DTU 都是这样 尸位素餐的话,总有某一刻服务器也被“卡死了” 。所以为了消除这种隐患,迫切需要一种功能能够准确查出那些尸位素餐的 DTU,然后把它们“踢下线 ”以释放资源。3.1.2 对判断 DTU 超时功能的设计思想启动服务器,打开了轮询程序并启动了监听程序,等候客户端的连接。若有客户端发来连接请求时,服务器就专门为这个客户端启动一个线程来接受并处理该客户端发来的数据;另外服务器会创建个节点来代表该客户端,并将该节点存在哈希表中。节点里封装有客户端的 IP 地址、连接端口号、向服务器

13、发送的数据、该节点在哈希表中存放的位置(即:键值)以及最后一次与服务器通讯时的时间(客户端向服务器发送一次数据,该时间即更新一次) 。 轮询程序启动以后,会每隔一段时间轮询一次哈希表,对里面存储的客户端节点中的时间进行检查,若其大于指定值则默认该客户端节点已故障,将与其断开连接。3.2 设计时用到的重要的技术或数据结构3.2.1 同步锁当我们用多线程访问或修改同一共享资源时,可能会引起线程间的冲突,因此引入线程同步机制,来让先到的线程率先访问或修改该共享资源而在这一线程对共享资源的访问或修改还没有结束之前,任何要访问或修改该共享资源的线程都必须等待,这样就很好得解决了线程间的并发问题。 本设计

14、中轮询机制的代码在访问或删除哈希表中的客户端节点时,必须考虑到此时可能有新的客户端向服务器端发出连接请求但是轮询尚未结束不能将新来的节点插入哈希表,所以要将轮询代码与向哈希表插入节点的代码同步起来。同步分为 同步方法 和 同步块 两种方式。3.2.1.1 Synchronized 加在方法上, (同步方法,锁定类实例)Java 代码7public class Demo1 public synchronized void m1() /. public void m2() /. synchronized(this) /. /. 这两种写法的效果是一样的,锁定的都是类实例。如果有两个 类实例: de

15、1 = new Demo1(),de2 = new Demo1(),另外有两个线程: thread1,thread2,都调用了de1 对象,那么,在同一时间,如果 thread1 调用了 de1.m1(),则 thread2 在该时间内不能访问 de1.m1() 和 de1.m2(); 因为 thread1 把 de1 这个对象的锁使用了,所以无法分给其它线程使用。但是,如果 thread1 调用 de1.m1(), thread2 调用 de2.m1(), 则可以同时进行,因为它们调用的是不同的 Demo1 类对象实例。3.2.1.1 Synchronized 加在变量上, (同步块,锁定类

16、实例)Java 代码public class Demo2 Object a = new Object(); Object b = new Object(); public void m1() /. synchronized(a) /. /. public void m2() /. synchronized(b) /. /. 8 这种情况下,是实现代码块锁定,锁定的对象是变量 a 或 b; (注意:a 、b 都是非 static 的)如果有一个 类实例: do = new Demo2(),另外有两个线程:thread1,thread2,都调用了 do 对象,那么,在同一时间,如果 thread1

17、 调用了do.m1(),则 thread2 在该时间内可以访问 do.m2();但不能访问 do.m1() 的同步块, 因为 a 被 thread1 锁定了。若此代码里 a、b 变量用 static 修饰,其锁定的对象都是类 Demo2,而不是类的实例,即在多线程中,其共享的资源是属于类的,而不是属于类对象的。在这种情况下,如果 thread1 访问了这 2 个方法中的任何一个, 在同一时间内其它任何线程都不能访问 这 2 个方法。3.2.2 哈希表 3.2.2.1 哈希表的定义及其构造方法哈希表是一种重要的存储方式,也是一种常见的检索方法,是基于哈希表的 Map 接口的实现。此实现提供所有可

18、选的映射操作,并允许使用 null 值和 null 键。除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。其基本思想是将关系码的值作为自变量,通过一定的函数关系计算出对应的函数值,把这个数值解释为结点的存储地址,将结点存入计算得到存储地址所对应的存储单元。检索时采用检索关键码的方法寻找对应的节点。现在哈希表有一套完整的算法来进行插入、删除和解决冲突。在 Java 中哈希表用于存储对象,实现快速检索。java.util.HashMap提供了若干种方法让用户很方便地使用哈希表,而不需要考虑其真正如何工作的。哈希表类中提供了三种构造方法,分别是:public

19、HashMap ()public HashMap (int initialcapacity)public HashMap (int initialCapacity,float loadFactor)public HashMap(Map m)参数 initialCapacity 是 HashMap 的初始容量,它的值应大于 0。loadFactor 又称装载因子,是一个 0.0 到 0.1 之间的 float 型的浮点数。它是一个百分比,表明了哈希表何时需要扩充,例如,有一哈希表,容量为 100,而装载因子为 0.9,那么当哈希表 90%的9容量已被使用时,此哈希表会自动扩充成一个更大的哈希表。

20、如果用户不赋这些参数,系统会自动进行处理,而不需要用户操心。3.2.2.2 HashMap 提供了基本的插入、检索等方法。插入public V put(K key,V value)在此映射中关联指定值与指定键。如果该映射以前包含了一个该键的映射关系,则旧值被替换。检索public boolean containsValue(Object value)如果此映射将一个或多个键映射到指定值,则返回 true。public Set keySet()返回此映射中所包含的键的 Set 视图。该 set 受映射的支持,所以对映射的更改将反映在该 set 中,反之亦然。如果在对 set 进行迭代的同时修改了

21、映射(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。该 set 支持元素的移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作可从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。public Collection values()返回此映射所包含的值的 Collection 视图。该 collection 受映射的支持,所以对映射的更改将反映在该 collection 中,反之亦然。如果在对 collection 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作除外

22、),则迭代结果是不确定的。该collection 支持元素的移除,通过 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作可从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。 public Set entrySet()返回此映射所包含的映射关系的 Set 视图。 该 set 受映射支持,所以对映射的更改将反映在此 set 中,反之亦然。如果在对 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作,或者通过在该迭代器返回的映射项上执行 setValue 操作除外),则迭代结果是不确定的。该 set 支持元素的移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作可从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报