Настройка простого сервера / клиента, получение "java.net.ConnectException: соединение отказано: соединение"

Я борюсь с настройкой моего первого соединения сервер / клиент. У моего GUI есть диалог. После нажатия кнопки "Отправить" внутри я звоню client.connect().

Это работает в первый раз, но когда я продолжаю и снова открываю диалоговое окно (оно закрывается само собой после нажатия "Отправить") и пытаюсь сделать то же самое снова, я получаю ошибку "отказано в соединении". Я подозреваю, что это связано с тем, что сервер все еще подключен к исходному сокету и происходит запуск события кнопки client.connect() снова. (Который попробует подключить новый). Но я не знаю, как сделать так, чтобы этого не случилось. Я как-то должен закрыть клиентское гнездо после закрытия диалога, верно? Как мне это реализовать? Или проблема кроется где-то еще? Это было только предположение, которое кажется правильным.

Вот мой Client класс (включает в себя connect() метод называется выше):

public class Client extends Application
{
    private String string = "";
    Socket s;

    @Override
    public void start(Stage primaryStage)
    {
        VBox root = new VBox();
        Scene scene = new Scene(root, 380, 200);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) throws IOException
    {
        Client client = new Client();
        client.connect();
        launch(args);
    }

    public void connect() throws UnknownHostException, IOException
    {
        s = new Socket("localhost",3000);
        System.out.println("Connected");
        PrintWriter dos = new PrintWriter(s.getOutputStream());
        dos.println(string);
        dos.flush();
    }
}

А вот мой Server учебный класс:

public class Server
{
    public static void main(String[] args) throws UnknownHostException, IOException
    {
        ServerSocket server = new ServerSocket (3000);
        Socket s = server.accept();
        System.out.println("Connected");
        BufferedReader dis = new BufferedReader(new InputStreamReader(s.getInputStream()));
        System.out.println(dis.readLine());
    }
}

Пожалуйста, обратите внимание, что я впервые настраиваю Сервер / Клиент в java, следовательно, localhost, чтобы попробовать это, и, вероятно, очевидная проблема.

0 ответов

Другие вопросы по тегам