Я хочу установить соединение клиент-сервер (с интерфейсом 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 () не закомментирован, клиент просто не подключится к серверу.