"Krótko o działaniu aplikacji. Po uruchomieniu serwer oczekuje na połączenie. Po połączeniu serwer wysyła do klienta komunikat "Ping" i oczekuje na odpowiedź. Jeśli klient odpowie "Pong" to serwer po 5 sekundach ponownie wysyła "Ping". W przypadku otrzymania złej odpowiedzi serwer się wyłącza.
Klient sprawdza nadchodzące komunikaty, jeśli otrzyma "Ping" to odpowiada "Pong". Dla celów testowych klient po 30 sekundach działania wyśle komunikat "Pon g" zamiast "Pong" i się wyłączy."
Stworzyłem klasę Client i Server, gdzie są zachowane wszystkie procesy. Pojawiła się masa wymogów, że konieczne jest stworzenie wyjątków - zrobiłem dla praktycznie każdej nowej linijki, nie wiem, czy nie zaburzyłem płynności procesu. Sytuacja wygląda tak, że klikam button "bStworzSerwer" i cały program się zawiesza. Co poprawić? Mogę udostępnić główne kody z klientem i serwerem.
if (source == bStworzSerwer)
{
/*Utworzenie na podanym porcie socketa serwera.*/
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(Server.getPORT());
} catch (IOException e1) {
e1.printStackTrace();
}
/*Oczekiwanie na połączenie i zaakceptowanie*/
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e1) {
e1.printStackTrace();
}
/*Utworzenie strumieni wejściowego i wyjściowego*/
BufferedReader in;
try {
try (PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)) {
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
/*Wysłanie komunikatu*/
out.println("Hello");
/*Oczekiwanie i odebranie komunikatu*/
String input = in.readLine();
in.close();
/*Zamknięcie strumieniu i socketów*/
out.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
//in.close();
try {
clientSocket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
serverSocket.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (source == bDołącz)
{
try {
Socket socket = new Socket(Client.getHOST(), Server.getPORT());
} catch (IOException e1) {
e1.printStackTrace();
}
}