Как вернуться в начальную функцию запуска

Добрый вечер, я новичок в Java-сетях и создаю сервер и клиент. На клиенте я хотел бы вернуться к методу run() после получения ответа в методе response(), однако я не уверен, как это реализовать. Моя оригинальная идея выглядит так:, однако она не работает.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client implements Runnable
{
public Client()
{
    try
    {
        socket = new Socket(IP, PORT);
        writer = new PrintWriter(socket.getOutputStream());
        reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        running = true;

        runningThread = new Thread(this);
        runningThread.start();
    }catch(Exception e){e.printStackTrace(); disconnect();}
}

public void disconnect()
{
    running = false;
    if(runningThread != null)
        runningThread.interrupt();
    runningThread = null;

    try
    {
        reader.close();
    }catch(Exception e){}
    reader = null;

    try
    {
        writer.close();
    }catch(Exception e){}
    writer = null;
    try
    {
        socket.close();
    }catch(Exception e){}
    socket = null;
}

public void sendMessage(String message)
{
    if(running)
    {
        writer.println(message);
        writer.flush();
    }
}

public void response()
{
    try
    {

        String response = "";
        while((response = reader.readLine()) != null && running)
        {
            System.out.println("Recieved Response '" + response + "'");
            run();
        }
    }catch(Exception e) {disconnect();}
}

public void run()
{
    try
    {
        Scanner scan = new Scanner(System.in);
        String message = "";
        while((message = reader.readLine()) != null && running)
        {
            System.out.println(message);

            System.out.println("Enter Command: ");
            String command = scan.nextLine();

            sendMessage(command);
            command = "";
            scan.close();
            response();
        }
    }catch(Exception e){disconnect();}

    }

private Socket socket;
private PrintWriter writer;
private BufferedReader reader;

private Thread runningThread;
private boolean running;

private static final int PORT = ----;
private static final String IP = "--------";

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

Любая помощь будет оценена.

1 ответ

Попробуйте поместить метод отсоединения в блок finally или в свой блок try catch.

например

} catch(Exception e) {
  // error ignored
} finally {
  disconnect();
}

больше информации, смотрите здесь

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