一、任务概述
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
本项目采用Java UDP编程,实现服务器定时发送温度数据,客户端接收并绘制动态温度曲线,深入理解C/S模式与网络编程。
430

被折叠的 条评论
为什么被折叠?



