Auf Thema antworten

Hallo


Ich möchte gerne mehrere Clients mit dem Server verbinden und zwischen diesen Objekte hin und her schicken. Das Problem das ich momentan habe ist, dass sich der erste Client mit dem Server erfolgreich verbindet und auch ein erstes String-Objekte an den Server schickt und dieses String-Objekt auch wieder zurückerhält. Sobald ich aber einen zweiten Client starte bekomme ich eine java.lang.NullPointerException. Ich finde leider den Fehler nirgends. Könnt ihr mir sage was ich übersehe?


[code=Java]

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;


@SuppressWarnings("serial")

public class Client {

   

    //Attribute

   Socket socket;

   Object inputObject;

   ObjectInputStream in;

   ObjectOutputStream out;

   

    public static GameObject gObject;

    public static int counter = 0;

   


    //Konstruktor

    public Client(String hostName, int portNumber) {

        connect(hostName, portNumber);

        counter++;

        sendAndReceiceMessageServer(); 

    }

   

    //Main-Methode

    public static void main(String[] args) {

        String hostName = "localhost";

        int portNumber = 50001;

        new Client(hostName, portNumber);

       

    }

   

    //Methoden

    public void connect(String hostName, int portNumber) {

        try {

            //Create a new socket, connect immediately

            socket = new Socket(hostName, portNumber); 

       

        // Create reader and writer for the socket

            in = new ObjectInputStream(socket.getInputStream());

            out = new ObjectOutputStream(socket.getOutputStream());

           

            String t= "Hallo ich bin der Client";

            out.writeObject(t);

            out.flush();

        }

        catch (Exception e) {

           

        }

    }

   

   

    public void sendAndReceiceMessageServer() {   

        try {

       

        //Read and display the reply from the server

        while ((inputObject = in.readObject()) != null) {

           

            if (inputObject instanceof String) {

                String ausgabe = (String) inputObject;

               

                System.out.println(ausgabe);

               

                try {

                    Thread.sleep(100);

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

               

            }   

        }

       

        //Clean up

        //in.close();

        //out.close();

        //socket.close();

       

    }  catch (Exception e) {

        System.out.println(e.toString());

        System.exit(1);

    }

    }

   

}

[/code]


******************************************************


[code=Java]

import java.io.IOException;

import java.net.ServerSocket;


public class Server {



    public static void main(String[] args) throws IOException{

       

        int portNumber = 50001; // dynamic ports from 49152–65535

       

        try (ServerSocket serverSocket = new ServerSocket(portNumber)) { // create ServerSocket

          

            new ServerThread(serverSocket.accept()).start(); // set up connection and start run method


        } catch (IOException e) {

            System.err.println("Could not listen on port " + portNumber);

            System.exit(-1);

        }

    }

}

[/code]


******************************************************


[code=Java]

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.util.ArrayList;

import java.util.Iterator;


public class ServerThread extends Thread{


    //attributes

    private Socket socket;   // = null;

    public static ArrayList<String> ausgabeList = new ArrayList<String>(2);

    public static ArrayList<ObjectOutputStream> outlist = new ArrayList<ObjectOutputStream>(2);


   

    //constructor

    public ServerThread(Socket socket) {

        this.socket = socket;

    }

   

    public void run() {

        try{

           

            ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());

            out.flush();

            outlist.add(out);


            ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

           

            Object inputObject;

           

            //***

            try {

               

                while ((inputObject = in.readObject()) != null) {

                   

                    //String object

                    if (inputObject instanceof String) {

                        String ausgabe = (String) inputObject ;

                        System.out.println(ausgabe);

                        ausgabe = ausgabe +  " und bin jetzt verbunden mit dem Server!";

                        //ausgabeList.add(ausgabe);

                       

                       

                        out.writeObject(ausgabe);

                       

                        try {

                            Thread.sleep(1000);

                        } catch (InterruptedException e) {

                            e.printStackTrace();

                        }               

                       

                    }               

                    }

               

               

            }catch (Exception e) {

               

            }

           

        }

            catch (Exception e){

           

        }

   

    }


}[/code]



Oben