Aplikacja Klient- Serwer, komunikator

0

Witam, jestem nowa w programowaniu. Ale już zaczynam mieć pewne problemy, nie wiem czy to wina mojego kompilatora, czy po prostu dalej popełniam błędy w pisaniu, więc byłabym wdzięczna gdyby koledzy zerknęli na moje wypociny.

Mam tutaj 2 kody jeden dla klienta drugi dla serwera. I teraz póki co zwykłe wysyłanie wiadomości działa, jednak nie wiem czy to u mnie, czy generalnie nie działa tutaj funkcja, że jak napiszę "koniec" to się aplikacja zamyka.

Drugi problem to taki, że muszę zapodać wyjątek dla sytuacji kiedy klient próbuje nawiązać połączenie z serwerem w sytuacji kiedy pod wskazanym adresem i numerem portu nie działa żaden serwer.

I tutaj jest kod dla klienta :

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

public class Klient {
public static final int PORT = 10900;
public static final String HOST = "localhost";

public static void Klient(String[] args) {
    try{
    Socket sock = new Socket(HOST, PORT);
    System.out.println("Nawiązałem połączenie: "+ sock);

    boolean done = false;
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter out = new PrintWriter(sock.getOutputStream());
    while(!done){
        System.out.println("Wysyłamy: ");
        String str = reader.readLine();
        if(str.equalsIgnoreCase("koniec")){
            done = true;
            System.out.println("Koniec połączenia");
        }
        out.print(str);
        out.flush();
    }
    out.close();
    reader.close();
    sock.close();
    }catch(Exception e){
        System.err.print(e);
    }

    try

{
server = new Socket(4444);
}
catch (IOException e)
{
System.out.println("Błąd w porcie" + 4444 + ", " + e);
System.exit(1);
}
Socket client = null;
try
{
client = server.accept();
}
catch (IOException e)
{
System.out.println("Nie udalo sie zrealizowac polaczenia " + 4444 + ", " + e);
System.exit(1);
}

}


A tutaj dla Serwera:


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;



public class Serwer {

    public static final int PORT = 10900;
    public static final String HOST = "localhost";



    public static void Serwer (String[] args){
        try{
            ServerSocket server = new ServerSocket(PORT);
            Socket sock = server.accept();
            System.out.print("jest połączenie: "+ sock);
            BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            boolean done = false;
            while(!done){
                String str = reader.readLine();
                System.out.println("Nadeszło: "+ str);
                if(str.equalsIgnoreCase("koniec")){
                    done = true;
                    System.out.println("Koniec połączenia");
                }
            }
            reader.close();
            sock.close();
            server.close();
        }catch(Exception e){
            System.err.print(e);
        }
    }
}

Wiem, że to jest niby proste, ale wciąż nie ogarniam w całości jak powinno się programować.
0

public static void Serwer (String[] args){
Czy to czasem nie miało być:
public static void main (String[] args){ ?
Co do zakończenia programu, to zobacz co ci się wypisuje w tym:
System.out.println("Nadeszło: "+ str);
i czy to jest aby na pewno słowo koniec, czy nie ma tam jakiejś spacji.
Z wyjątkiem to zupełnie nie rozumiem o co ci chodzi, bo w kodzie masz przechwytywany. Napisałeś kod z obsługą wyjątku a potem pytasz jak to zrobić. Może jakieś szczegóły tego problemu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1