Клиент не будет подключаться к серверу после запуска (args) -Метод-вызов добавлен в main-Method - PullRequest
0 голосов
/ 01 июня 2019

Я хочу установить соединение клиент-сервер (с интерфейсом Javafx на стороне клиентов), но клиент не будет подключаться к серверу. Интересно, что когда закомментирован запуск (args) -Method-Call в методе Main, клиент подключится к серверу.

Я довольно новичок в Java, особенно в приложениях Javafx и клиент-сервер. Следующий код частично не представляет весь класс, я просто исключил методы, которые не были необходимы в контексте (или, по крайней мере, я думаю, что они не нужны.

Main.java

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        LoginUI loginUI = new LoginUI(primaryStage);
        loginUI.setScene(primaryStage, loginUI.getScene());
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
        try {
            Client client = new Client(InetAddress.getLocalHost(), 9376);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        //loginUI.getSignUpUI().setSignUpButtonAction(client);
        //my only Instace of LoginUI is in start-Method. How do I pass that to main, since main is static?
    }
}

Client.java

public class Client {

    private Socket clientSocket;
    private DataOutputStream outputClient;
    private DataInputStream inputClient;

    public Client(InetAddress ipAddress, int port){
        try {
            this.clientSocket = new Socket(ipAddress, port);
            this.outputClient = new DataOutputStream(clientSocket.getOutputStream());
            this.inputClient = new DataInputStream(clientSocket.getInputStream());
            outputClient.writeUTF("Client connected on port: " + clientSocket.getPort() + ", with IP: " + clientSocket.getInetAddress());
        }
        catch(IOException e3){
            e3.printStackTrace();
        }
    }
}

Server.java

public class Server {

    private ServerSocket skt;
    private volatile boolean serverON;
    private Socket clientSocket;

    public Server(int port) {
        try {
            this.skt = new ServerSocket(port);
            this.serverON = true;
        }
        catch(IOException e1){
            e1.printStackTrace();
        }
    }

    public void serverStart() {
        while (serverON) {
            clientSocket = null;
            System.out.println("Waiting for client on port " + skt.getLocalPort());
            try {
                clientSocket = skt.accept();
                System.out.println("Client has connected: " + clientSocket);

                DataInputStream dataIn = new DataInputStream(clientSocket.getInputStream());
                DataOutputStream  dataOut = new DataOutputStream(clientSocket.getOutputStream());
                System.out.println("Trying to assign Thread to client...");

                Thread thread = new ClientHandler(clientSocket, dataIn, dataOut);
                thread.start();

            }
            catch (Exception e) {
                try {
                    clientSocket.close();
                }
                catch (IOException e1){
                    e1.printStackTrace();
                }
                e.printStackTrace();
                break;
            }
        }
    }
}

ServerMain.java

public class ServerMain {

    public static void main(String[] args){
        Server server = new Server(9376);
        server.serverStart();
    }
}

Я не получаю никакой ошибки (по крайней мере изначально, ошибки все еще возникают позже при использовании пользовательского интерфейса особым образом), когда вызов launch () не закомментирован, клиент просто не подключится к серверу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...