Поддерживайте ServerSocket в приложении JavaFX - PullRequest
0 голосов
/ 03 октября 2018

У меня есть два JavaFX приложения, одно из них играет роль client , с него я могу отправить сообщение другому приложению, которое представляет сервер , для чего я использовал Socket и ServerSocket для реализации, на данный момент я могу отправить одно сообщение от клиента, и оно успешно получено на стороне сервера, после чего соединение будет закрыто, так как я могу сохранить его и отправить несколько сообщений?

Client.java

public class Client extends Application {
    @Override
    public void start(Stage primaryStage) {
        Label connLabel = new Label("Not connected");
        TextArea message = new TextArea();
        message.setPromptText("Type your message here ...");
        Button btn = new Button();
        btn.setText("Send");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                try {
                    Socket c = new Socket("127.0.0.1", 2004);
                    connLabel.setText("connected");
                    ObjectOutputStream out = new ObjectOutputStream(c.getOutputStream());
                    out.writeObject(message.getText());
                    c.close();
                    out.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        VBox root = new VBox();
        root.setSpacing(10);
        root.setAlignment(Pos.CENTER);
        root.setPadding(new Insets(25));
        root.getChildren().addAll(message, btn);
        Scene scene = new Scene(root, 600, 600);
        primaryStage.setTitle("Client");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }

}

Server.java

public class Server extends Application {
    @Override
    public void start(Stage primaryStage) {
        VBox root = new VBox();
        Label msgRecu = new Label();
        root.setSpacing(10);
        root.setPadding(new Insets(25));
        root.setAlignment(Pos.CENTER);
        root.getChildren().addAll(msgRecu);
        Scene scene = new Scene(root, 600, 600);
        try {
            ServerSocket s = new ServerSocket(2004);
            System.out.println("Waiting");
            Socket connection;
            String ch = null;
            connection = s.accept();
            System.out.println("Accepted");
            ObjectInputStream in = new ObjectInputStream(connection.getInputStream());
            ch = (String) in.readObject();
            msgRecu.setText(ch);
            primaryStage.setTitle("Server");
            primaryStage.setScene(scene);
            primaryStage.show();
            s.close();
            connection.close();
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

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

}
...