服务端每隔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();
}
}
}
}
运行结果: