基于udp socket通信并生成温度曲线

biubiubiuBui

发布日期: 2019-09-11 09:28:58 浏览量: 141
评分:
star star star star star star star star star star
*转载请注明来自write-bug.com

一、任务概述

1.1 编写目的

  • 熟悉并学会使用C/S编程模式

  • 采用 Java 语言,了解 Socket 的原理,并熟悉使用 Socket 。并利用套接字 Socket 编写出指定题目的交互信息

  • 掌握对传输层协议TCP/UDP和客户/服务器数据通信的原理及方式

  • 进一步理解和领会计算机网络基本结构、计算机网络基础理论、计算机网络编程技术及Java 语言开发方法,把所学的知识运用到具体的程序设计当中去,编写一个接近实际的应用程序并掌握网络编程技术及应用程序分析、设计、编程和调试的整个过程。

1.2 项目任务和要求

采用UDP或者TCP编写一个网络程序,该程序的服务端每隔1秒向客户端发送一个温度值,客户端能够接收该温度值并显示一条动态温度曲线。

1.3 参考资料

1.3.1 DatagramSocket的构造器

  • DatagramSocket():创建一个DatagramSocket实例,并将该对象绑定到本机默认IP地址、本机所有可用端口中随机选择的某个端口

  • DatagramSocket(int prot):创建一个DatagramSocket实例,并将该对象绑定到本机默认IP地址、指定端口

  • DatagramSocket(int port, InetAddress laddr):创建一个DatagramSocket实例,并将该对象绑定到指定IP地址、指定端口

通过上面三个构造器中任意一个构造器即可创建一个DatagramSocket实例,通常在创建服务器时,我们创建指定端口的 DatagramSocket实例——这样保证其他客户端可以将数据发送到该服务器。

一旦得到了DatagramSocket实例之后,就可以通过如下两个方法来接收和发送数据:

  • receive(DatagramPacket p):从该DatagramSocket中接收数据报

  • send(DatagramPacket p):以该DatagramSocket对象向外发送数据报

1.3.2 DatagramPacket的构造器:

  • DatagramPacket(byte buf[],int length):以一个空数组来创建DatagramPacket对象,该对象的作用是接收DatagramSocket中的数据

  • DatagramPacket(byte buf[], int length, InetAddress addr, int port):以一个包含数据的数组来创建DatagramPacket对象,创建该DatagramPacket时还指定了IP地址和端口——这就决定了 该数据报的目的

  • DatagramPacket(byte[] buf, int offset, int length):以一个空数组来创建DatagramPacket对象,并指定接收到的数据放入buf数组中时从offset开始,最多放length个字节

  • DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):创建一个用于发送的DatagramPacket对象,也多指定了一个offset参数

在接收数据前,应该采用上面的第一个或第三个构造器生成一个DatagramPacket对象,给出接收数据的字节数组及其长度。然后调用 DatagramSocket 的方法receive()等待数据报的到来,receive()将一直等待(也就是说会阻塞调用该方法的线程),直到收到一个数据报为止。

二、开发环境

  • 操作系统:window 10

  • 开发环境:IDEA

三、项目需求分析

3.1 项目需求

  • 学会使用C/S模式编写一个网络程序,实现一个温度折线图

  • 了解并学会使用Java套接字,即DatagramSocket和DatagramPacket。并且还要了解DatagramSocket和DatagramPacket的应用场景

  • 温度折线图是动态的,实时的。即在服务器端产生的数据要不断地发送给客户端,而客户端也要不断的接收服务器端发送过来的数据

  • 利用JFreeChart是JAVA平台上的一个开放的图表绘制类库。可生成时序图(time series)

四、项目设计

4.1 总体思路

  • 采用C/S模式编写一个客户端,一个服务端。服务器端利用DatagramSocket创建套接字并把DatagramPacket创建的数据包利用send()方法发送到客户端

  • 客户端创建利用DatagramSocket创建套接字并用DatagramPacket创建一个数据包,在利用receive()方法接收数据包

  • 在客户端利用JFreeChart类提供的方法创建一个时序图。把从服务器端接收到的数据包里的数据转换成对应的温度,插入到时序图中去

4.2 网络编程三要素

4.2.1 IP地址:InetAddress

  • 获取任意主机:public static InetAddress getByName(String host):根据主机名或者IP地址的字符串表示得到IP地址对象

  • 端口号:用于标识进程的逻辑地址,不同进程的标识

    • 物理端口,网卡口
    • 逻辑端口,我们指的就是逻辑端口
      • 每个网络程序都会至少有一个逻辑端口
      • 用于标识进程的逻辑地址,不同进程的标识
      • 有效端口:0~65535,其中0~1024系统使用或保留端口
  • 传输协议:UDP

    • UDP:将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快

4.3 Socket

  • Socket套接字:网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字

  • Socket原理机制:通信的两端都有Socket。网络通信其实就是Socket间的通信。数据在两个Socket间通过IO传输

4.4 UDP传输思路设计

  • DatagramSocket与DatagramPacket

  • 建立发送端,接收端

  • 建立数据包

  • 调用Socket的发送接收方法

  • 关闭Socket

  • 发送端与接收端是两个独立的运行程序

UDP传输-发送端思路

  • 建立udp的socket服务

  • 将要发送的数据封装成数据包

  • 通过udp的socket服务,将数据包发送出

  • 关闭资源

UDP传输-接收端思路

  • 建立udp的socket服务

  • 通过receive方法接收数据

  • 将收到的数据存储到数据包对象中

  • 通过数据包对象的功能来完成对接收到数据进行解析.

  • 可以对资源进行关闭

4.5 类图

4.6 时序图的实现

  1. private static JFreeChart createChart(String chartContent, String title, String yAxisName) {
  2. ////创建时序图对象
  3. timeSeries = new TimeSeries(chartContent);
  4. //创建一个绑定在默认时区数据集
  5. TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeSeries);
  6. //生产时序图(标题,x轴名称,y轴名称,数据集,是否显示图例,是否生成工具,是否显示url链接)
  7. JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(title, "时间(秒)", yAxisName, timeseriescollection, true, true, false);
  8. ValueAxis valueaxis = jfreechart.getXYPlot().getDomainAxis();
  9. //自动设置数据轴时间范围
  10. valueaxis.setAutoRange(true);
  11. valueaxis.setFixedAutoRange(30000D);
  12. return jfreechart;
  13. }

五、程序的运行和测试结果

六、设计中的问题及心得

在本次实如何验中,我学会了使用UDP协议的DatagramSocket与DatagramPacket的使用。在本次实验中我不知道如何产生连续的温度,所以我在网站上找到了一盒函数Math.random(),用它生成的各种随机数。我们使用这些数字来生成时间序列图表的温度。但是问题又来了,怎么显示温度折线图,我在网上找了好多人写的东西发现JFreeChart是一个免费的100%Java图表库,使开发人员可以轻松地在他们的应用程序中显示专业质量的图表。所以我用这个来做了折线图。虽然最后实现了温度折线图,但是生成的折线图上没有显示每个温度的度数。

上传的附件 cloud_download 基于udp socket通信并生成温度曲线.7z ( 3.19mb, 1次下载 )
error_outline 下载需要9点积分

发送私信

吹过你窗前的那阵风是我对你的思念

10
文章数
10
评论数
最近文章
eject