Как вернуться в начальную функцию запуска
Добрый вечер, я новичок в 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();
}
больше информации, смотрите здесь