[内附完整源码和文档] 基于udp socket通信并生成温度曲线

本项目采用Java UDP编程,实现服务器定时发送温度数据,客户端接收并绘制动态温度曲线,深入理解C/S模式与网络编程。

一、任务概述
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地址对象

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

物理端口,网卡口
逻辑端口,我们指的就是逻辑端口
每个网络程序都会至少有一个逻辑端口
用于标识进程的逻辑地址,不同进程的标识
有效端口:065535,其中01024系统使用或保留端口
传输协议: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方法接收数据

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

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

可以对资源进行关闭

在这里插入图片描述

完整的源码和详细的文档,上传到了 WRITE-BUG技术共享平台 上,需要的请自取:

https://www.write-bug.com/article/2818.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值