# Versenden von Objekt



## Heraklit (15. Jun 2005)

Hi,
ich arbeite zur Zeit an einem Client-Server Programm, das folgendermaßen aufgebaut ist:
Ein Server verschickt ein Integer-Array an eine beliebige Anzahl von Clients, die dann aus dem Array, die Integers auslesen.

Der Server sieht bisher folgendermaßen aus:


```
public class TServer extends Thread
{

        protected Socket socket;

        public TServer (Socket s)
        {
                socket = s;
        }

        public void run ()
        {
                try
                {
                        int[] a = {1,2,3};
                        Object b = a;

                        PrintWriter os = new PrintWriter (new OutputStreamWriter (socket.getOutputStream ()), true);
                        os.println(b);
                }
                catch (IOException e)
                {
                        System.err.println(e);
                }

        }

        public static void main (String [] args)
        {
                try
                {
                        ServerSocket serverSocket = new ServerSocket (2000);

                        while (true)
                        {
                                TServer connection = new TServer (serverSocket.accept ());
                                connection.start ();
                        }
                }
                catch (IOException e)
                {
                        System.err.println (e);
                }
        }
}
```

Nun weiß ich aber nicht wie man im Client, die Integers aus dem Stream bekommt, nachdem man sie mit printwriter (im Server) hineingeschrieben hat. ReadLine() funktioniert ja hier wohl nicht! Mein bisheriger Client hat folgende Form:


```
import java.io.*;
import java.net.*;

public class TClient
{
        public static void main (String [] args)
        {

                try
                {
                        Socket socket = new Socket ("localhost", 2000);

                        //BufferedReader is = new BufferedReader (new InputStreamReader (socket.getInputStream ()));
                       
                        //???????????
                }
                catch (UnknownHostException e)
                {
                        System.err.println (e);
                }
                catch (IOException e)
                {
                        System.err.println (e);
                }
        }
}
```
Wie ist der Client also zu implementieren, damit man das zunächst in den Strom reingeschriebene Objekt (vgl. Server) wieder erhält (im Client)??

Außerdem möchte ich noch, dass die Daten an alle verbundenen Clients simultan übertragen werden! D.h. wenn der Server was verschickt, sollen dies alle Clients zur gleichen Zeit erhalten! Wie kann man dies an dem vorgestellten code verwirklichen?

Danke schön für eure Antwort


----------



## Heraklit (15. Jun 2005)

Hi,
ich habe jetzt das erste Problem gelöst. Jetzt zählt das Problem von 1 bis 10 im Sekundentakt. Aber wie kann man das Programm modifizieren, dass die selbe Zahl zur selben Zeit ausgegeben wird?

Hier der neue Code:


```
import java.io.*;
import java.net.*;

public class TClient extends Thread
{
        public static void main (String [] args)
        {
                String line;

                try
                {
                        Socket socket = new Socket ("localhost", 2000);

                        ObjectInputStream a= new ObjectInputStream((socket.getInputStream()));
                        sleep(1000);

                        Integer[] b = (Integer[]) a.readObject();

                        for(int i=0; i <10; i++)
                        {
                                System.out.println(b[i].intValue());
                                sleep(1000);
                        }


                        socket.close ();
                }
                catch(Exception e){}
        }
}
```


```
import java.io.*;
import java.net.*;

public class TServer extends Thread
{

        protected Socket socket;

        public TServer (Socket s)
        {
                socket = s;
        }

        public void run ()
        {

                Integer[] a = new Integer[10];

                try
                {

                        for(int i=0;i<10;i++)
                        {
                                a[i] = new Integer(i);
                        }

                        System.out.print ("connection accepted [");
                        System.out.print (socket.getInetAddress ().getHostAddress ());
                        System.out.print ("]\n");

                        ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream ());
                        out.writeObject(a);
                }
                catch (IOException e)
                {
                        System.err.println(e);
                }

        }

        public static void main (String [] args)
        {
                try
                {
                        ServerSocket serverSocket = new ServerSocket (2000);

                        while (true)
                        {
                                TServer connection = new TServer (serverSocket.accept ());
                                connection.start ();
                        }
                }
                catch (IOException e)
                {
                       System.err.println (e);
                }
        }
}
```


----------



## stev.glasow (16. Jun 2005)

Mit System.currentTimeMillis() kannst du dir die aktuelle Systemzeit holen und entsprechend die aktuelle Sekunde ausrechnen:
int aktS = (int)(System.currentTimeMillis() / 1000 % 60);
und dann braucht du halt nur doch in deiner Schleife aktS zu i hinzuaddieren.


----------

