Avatar billede bumle90 Nybegynder
26. april 2002 - 17:47 Der er 6 kommentarer og
1 løsning

sende objekter over netværk

Hej. Jeg vil gerne sende et objekt over et netværk,fx. fra en klient til en server eller omvendt.  Mit spørgsmål er om jeg kan gøre dette vha. datagrammer eller om jeg SKAL bruge streams, eller om der er en helt anden alternativ måde at gøre det på...
Avatar billede gybel Nybegynder
26. april 2002 - 18:19 #1
Hej jeg benytter streams til at sende objecter over netværket.
her er hvordan jeg gør:

public void write(OutputStream os) Throws IOException {
  ObjectOutputStream oos = new ObjectOutputStream(os);
  for(int i=0; i<"et antal"; i++) {
      oss.writeObejct(Container.get(i));
      }
  }

så skal du kalde metoden med det object i parameter du ønsker at sende.
Avatar billede carstenknudsen Nybegynder
26. april 2002 - 18:26 #2
Fordelen ved at sende objekter via streams
er at med f.eks. ObjectOutputStream kan
du sende de fleste objekter (dem der implementerer
Serializable) og du kan få den genskabt
med en simpel classcasting.
Datagrammer kan selvfølgelig også bruges
men det er meget afhængigt af hvor let
det er at lave dit objekt om til en
byte[] og ligeså vigtigt at lave en byte[]
om til dit objekt. For strenge f.eks. er det
ligetil men for dine egne klassetyper kan
det måske være besværligt?
Avatar billede disky Nybegynder
26. april 2002 - 18:56 #3
gybel:

Din kode trænger til lidt oprydning.

Du skrive "et antal" øh siden du øjensynligt sender fra en List hvorfor ikke bruge den metode på list objectet der returnere antalet af objecter.
Hvis du ikke vil sende alle med sender man antal i metode kaldet.

Ligeledes skulle man nok medsende List objektet i metode kaldet.

Forresten er det kotume at give variabler lille forbogstav. (jeg tænker på din 'Containter')
Avatar billede bumle90 Nybegynder
26. april 2002 - 19:03 #4
ok..det er bare fordi jeg kan simpelthen ikke få det til at virke med streams. Når jeg prøver at overføre et object "hænger" programmet bare uden der sker noget. Her er en simpel kode hvor jeg fx. ikke kan få det til at virke. Hvad er der galt der ?

import java.io.*;
import javax.swing.*;
import java.net.*;
public class objectOverNet extends JFrame
{
    ServerSocket serverstub;
    Socket stub;
    ObjectInputStream in;
    ObjectOutputStream out;

   
    public objectOverNet(int port)
    {
        try
        {
    serverstub=new ServerSocket(port);
            while (true)
            {
            stub=serverstub.accept();
            in=new ObjectInputStream(stub.getInputStream());
            out=new ObjectOutputStream(stub.getOutputStream());

            Object modtaget=in.readObject();
            System.out.println("klassen :"+modtaget.getClass());
            }
        }
        catch (IOException e)
        {
        }
        catch (ClassNotFoundException e)
        {
        }
    }
   
    public objectOverNet(String ip,int port)
    {
        try
        {
        stub=new Socket(ip,port);
        in=new ObjectInputStream(stub.getInputStream());
        out=new ObjectOutputStream(stub.getOutputStream());   

        java.util.Vector vector=new java.util.Vector();
        out.writeObject(vector);   
        out.flush();
        out.close();
        }
        catch (IOException e)
        {
        }
    }
       
    public static void main(String[]argz)
    {
    try
    {
        if (argz.length==1)
        new objectOverNet(Integer.parseInt(argz[0]));
       
        if (argz.length==2)
        new objectOverNet(argz[0],Integer.parseInt(argz[1]));   
       
        if (argz.length==0 || argz.length>2)
        throw new RuntimeException();
    }
    catch (RuntimeException e)
    {
    System.out.println("\n\nFejl i kørsel!!!\n\nfor at starte programmet"+
    "som klient skal du skrive :\njava objectOverNet serverip serverport \n"+
    "for at starte programmet som Server skal du skrive :\njava objectOverNet serverport \n\n");
    }
    }
}
Avatar billede carstenknudsen Nybegynder
26. april 2002 - 20:05 #5
Hent først output streams dernæst input streams.
Skriv ud i dine catch så du kan se hvis
noget går galt.
Avatar billede bumle90 Nybegynder
26. april 2002 - 21:15 #6
takker...det var det der var galt...hvor i alverden skal man vide sådan noget fra :D
Avatar billede carstenknudsen Nybegynder
26. april 2002 - 22:06 #7
Tja, nu ved du det i hvertfald; jeg kan
ikke huske hvornår jeg første gang fandt
ud af/læste det.
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