JavaFX、对客户计数

 


服务器:

package net;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Exercise31_04Server extends Application {
    private static final File FILE = new File("D:\\IDEA程序\\JavaFXProject\\src\\files\\counter.dat");
    private static final int SERVER_PORT = 8000;        //端口后
    private TextArea textArea = new TextArea();         //文本区域(显示信息)

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws IOException {
        //文本区域设置属性
        textArea.setPrefColumnCount(30);
        textArea.setPrefRowCount(10);

        try(DataOutputStream outputStream = new DataOutputStream(new FileOutputStream(FILE))) {
            if (FILE.length() == 0)         //设置第一个值
                outputStream.writeInt(0);
        }

        Scene scene = new Scene(new ScrollPane(textArea));
        primaryStage.setScene(scene);
        primaryStage.setTitle("Exercise31_04Server");
        primaryStage.show();

        //启动线程
        new Thread(this::startServer).start();
    }

    /** 启动服务器 */
    private void startServer() {
        try {
            //创建服务器套接字
            ServerSocket server = new ServerSocket(SERVER_PORT);
            Platform.runLater(() -> textArea.appendText(this.getClass().getSimpleName() + " started at " + new Date() + "\n"));

            while (true) {
                //创建套接字(连接客户端)
                Socket socket = server.accept();
                DataOutputStream outputToClient = new DataOutputStream(socket.getOutputStream());

                //创建随机访问文件
                try(RandomAccessFile accessFile = new RandomAccessFile(FILE, "rw")) {
                    final int counter = accessFile.readInt();   //从文件读取次数
                    outputToClient.writeInt(counter);           //发送次数到客户端
                    Platform.runLater(() -> {
                        textArea.appendText("Starting thread " + counter + "\n");
                        textArea.appendText("Client IP /" + socket.getInetAddress().getHostAddress() + "\n");
                    });
                    accessFile.setLength(0);            //清空文件
                    accessFile.writeInt(counter + 1);   //设置新次数
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

客户端:

package net;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextArea;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;

public class Exercise31_04Client extends Application {
    private static final String HOST = "localhost";     //主机/IP地址
    private static final int SERVER_PORT = 8000;        //端口号

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        //文本(显示信息)
        Text text = new Text();
        text.setFont(Font.font(24));

        Scene scene = new Scene(new StackPane(text), 350, 250);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Exercise31_04Client");
        primaryStage.show();

        try {
            //创建套接字(连接服务器)
            Socket socket = new Socket(HOST, SERVER_PORT);
            DataInputStream inputFromServer = new DataInputStream(socket.getInputStream());
            int counter = inputFromServer.readInt();    //读取数据
            Platform.runLater(() -> text.setText("You are visitor " + counter));
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值