Socket-Server beendet sich selbst?

janbuecker

Mitglied
Hi,

ich möchte einen Socket-Server sowie einen dazugehörigen Client programmieren. In der Anfangsphase (um damit vertraut zu werden), möchte ich lediglich nur, dass der ich etwas vom Client abschicke (einen String) und der Server mir das zurück gibt, was ich geschrieben habe! Klingt äußerst simpel, aber jeder fängt mal klein an ;-)

Mein Problem ist jetzt aber, dass wenn ich vom Client etwas abschicke und der Client sich quasi beendet, beendet sich auch automatisch der Server mit dem Grund: socket closed !

Hier der Code vom Server:
Code:
import java.io.*;
import java.net.*;

public class Server {

    private String authinfo = "pmbs";
    ServerSocket Master = new ServerSocket(9999);

    private void send(Socket socket, Object tmp) throws IOException {
        BufferedWriter wr;
        wr = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        wr.write(tmp.toString());
        wr.flush();
        wr.close();
    }

    Server() throws IOException {
        while (true) {
            Socket Client = Master.accept();

            BufferedReader rd = new BufferedReader(new InputStreamReader(Client.getInputStream()));

            String str;
            while ((str = rd.readLine()) != null) {

                String[] args = str.split(" ");
                String command = args[0];
                String auth = args[1];

                if (auth.equals(authinfo)) {

                    if (command.equals("reply")) {
                        String tmp = "";
                        for (int i = 2; i < args.length; i++) {
                            tmp = tmp + " " + args[i];
                        }
                        send(Client, tmp);
                    }

                }
            }

            rd.close();

            Client.close();

        }
    }

    public static void main(String[] args) {
        try {
            Server server = new Server();
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }
}

..und vom Client:

Code:
import java.net.*;
import java.io.*;

public class Client {

    Client() throws IOException {
        Socket Master = new Socket("localhost", 9999);

        BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(Master.getOutputStream()));
        wr.write("reply pmbs check check yoaar\n");
        wr.flush();
        
        BufferedReader rd = new BufferedReader(new InputStreamReader(Master.getInputStream()));
        String str;
        while ((str = rd.readLine()) != null) {
            System.out.println(str);
        }
        rd.close();
        wr.close();
    }

    public static void main(String[] args) {
        try {
            Client client = new Client();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
}

Ich hoffe ihr könnt mir ein wenig auf die Sprünge helfen... Danke!

Gruß,
Jan
 
Hi Jan,
soweit ich es gerade sehe sieht es so aus, als wenn Dein Server ein null zurückbekommt wenn der Client nicht mehr da ist.

Code:
 while ((str = rd.readLine()) != null)
Dann muss er sich ja auch verabschieden, oder was würdest Du sonst erwarten?
Leider habe ich gerade keinen Zugriff, auf eines meiner Programme, mit dme ich auch über Socket-Programmierung kommuniziere. Werde da später mal reinschauen, wie ich das damals gemacht habe.

Nebenbei ist es in Java üblich, alle Bezeichner von Membern, egal ob Methode oder Variable, mit einem kleinen Buchstaben beginnen zu lassen. Nur Konstanten sollen grundsätzlich keine Kleinbuchstaben enthalten. ;-)
 
Zurück