服务器:
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();
}
}
}