UDP绘制温度曲线

本文介绍了如何使用UDP协议实现服务端每秒发送温度值到客户端,客户端通过javafx库动态展示温度变化的折线图。服务端代码创建DatagramSocket发送数据,客户端代码接收数据并更新LineChart图表。
摘要由CSDN通过智能技术生成

服务端每隔1秒向客户端发送一个温度值,客户端能够接收该温度值并显示一条动态温度曲线
服务端代码:

package lab.lab;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class TempService {

static DatagramSocket socket;
public static void main(String[] args) {
	try {
		socket = new DatagramSocket(9990);
		TempThread tt = new TempThread();
		tt.start();
	} catch (SocketException e) {
		e.printStackTrace();
	}
}
private static class TempThread extends Thread{
	public void run(){
		while(true){
			try {
				String temp = ((int)(10+Math.random()*50))+"";
				byte[] b = temp.getBytes();
				DatagramPacket dp = new DatagramPacket(b, b.length, InetAddress.getByName("127.0.0.1"),9999);
				socket.send(dp);
				sleep(1000);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

}

客户端代码:
package lab.lab;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.ArrayList;
import java.util.List;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;

public class TempClient extends Application{
List tempList = new ArrayList();
XYChart.Series<Number, Number> series;
public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage stage) throws Exception {
	Init();
	final NumberAxis xAxis=new NumberAxis();
    final NumberAxis yAxis=new NumberAxis(10, 60, 10);
    xAxis.setLabel("Time");
    yAxis.setLabel("Temperature");
    final LineChart<Number,Number> lineChart=new LineChart<Number,Number>(xAxis,yAxis);
    series = new XYChart.Series<Number, Number>();
    series.setName("动态温度曲线");
	lineChart.getData().add(series);
	Scene scene = new Scene(lineChart, 550, 400);
	stage.setTitle("温度曲线图");
	stage.setScene(scene);
	stage.show();
}
private void Init(){
	getTempThread gtt = new getTempThread();
	gtt.start();
}
private class getTempThread extends Thread{
	public void run(){
		DatagramSocket socket;
		try {
			socket = new DatagramSocket(9999);
			while(true){
				byte[] a = new byte[100];
				DatagramPacket dp = new DatagramPacket(a, a.length);
				socket.receive(dp);
				String s = new String(dp.getData(), 0, dp.getLength());
				tempList.add(Integer.parseInt(s));
				Platform.runLater(()->{
					int t = series.getData().size();
                    int xValue=-1;
                    if(t>0)
                        xValue=(int)series.getData().get(series.getData().size()-1).getXValue();
                    series.getData().add(new XYChart.Data(xValue+1,Integer.parseInt(s)));
                });
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

}

运行结果:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值