Avatar billede zigge Nybegynder
02. december 2002 - 09:52 Der er 3 kommentarer og
1 løsning

Serilazie en hashtable og sende den via en socket

Jeg står og skal sende indholdet af en hashtable fra et klientprogram, til en tråd i en server.
Det er også fint nok...men hvordan ser det centrale kode lige ud til at foretage selve "forsendelsen", altså når man har åbnet forbindelsen til serveren og har puttet noget i hashtabellen, som er klart til at sende?
Avatar billede arne_v Ekspert
02. december 2002 - 10:02 #1
Det nemmeste er vel at bruge ObjectOutputStream
i client og ObjectInputStream i server, så sker
alt det hårde arbejde automatisk.
Avatar billede disky Nybegynder
02. december 2002 - 10:08 #2
Den letteste måde er at lade Java gøre arbejdet for dig, ved hjælp af ObjectOutputStream og ObjectInputStream som du så kobler op på din socket stream forbindelse.

Derved ordner Java arbejdet for dig, og du skal egentligt ikke lave andet end at typecaste det til en HashTable i modtagerens ende, så den ved hvad for en type objekt det er:

f.eks:
String today = (String)p.readObject();
Date date = (Date)p.readObject();

eller i dit tilfælde

HashTable hash=(HashTable)p.readObject();

I alle 3 eksempler er 'p' dit ObjectInputStream objekt.
Avatar billede anadan Nybegynder
02. december 2002 - 10:10 #3
Jeg går ud fra at alle de ting du lægger i dit Hashtable implements java.io.Serializable...

Hvis du bruger Scoket/ServerSocket, kan du lave Object streams med sockets' standard input/output stream

ObjectInputStream stream = new ObjectOutputStream(socket.getOutputStream());
nu kan du skrive dit hashtable direkte til denne stream...

Hashtable table = new Hashtable();
//fyld hastable
stream.writeObject(table);

og bruge en ObjectInputStream til at læse den ind igen på den anden side med stream.readObject();
husk at det du får når du indlæser er et Object og derfor skal castes til et Hashtable...
Avatar billede disky Nybegynder
02. december 2002 - 10:20 #4
Til at sende med:
        try
        {
        Socket socket=new Socket("http://www.MinServer",1234);
        ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
        Hashtable hash=new Hashtable();
        hash.put("key","værdi");
        oos.writeObject(hash);
        oos.close();
        socket.close();
        }
        catch(UnknownHostException e)
        {
        }
        catch(IOException e)
        {
        }

Til at modtage:
        try
        {
            Socket socket=new Socket("http://www.MinServer",1234);
            ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
            Hashtable hash=(Hashtable)ois.readObject();
            String vaerdi=(String)hash.get("key");
            ois.close();
            socket.close();
        }
        catch(UnknownHostException e)
        {
        }
        catch(IOException e)
        {
        }
        catch(ClassNotFoundException e)
        {
        }


p.s. Exception handling skal gøres pænere, men ovenstående skulle virke.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester