Avatar billede mikkel_sommer Nybegynder
30. september 2004 - 23:32 Der er 8 kommentarer og
1 løsning

Sende et objekt fra en klient til en server

Hej eksperter
Jeg skal lave en server og 4 klienter som denne server skal servicere. Det skal være muligt på klientsiden at oprette et objekt og sende det til serveren som indsætter objektet i en vector. Men samtidig skal det også være muligt at sende objekter den anden vej, eksempelvis disse vectorer.

Det jeg arbejder ud fra lige nu er et programeksempel jeg har fundet hvor en server tilbyder en datoservice som en klient så kan gøre brug af og derved få oplyst tiden. Men her kan jeg så ikke lige gennemskue om det er muligt at sende et objekt med i det request klienten laver og hvordan det eventuelt gøres.

Min server klasse:

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

public class DaytimeServer
{
  public static final int SERVICE_PORT = 13;

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

      System.out.println("Daytime service started");

      for(;;)
      {
        Socket nextClient = server.accept();

        System.out.println("Recieved request from " +
          nextClient.getInetAddress() + ":" + nextClient.getPort());

        OutputStream out = nextClient.getOutputStream();
        PrintStream pout = new PrintStream(out);

        pout.print(new java.util.Date());

        out.flush();

        out.close();

        nextClient.close();
      }
    }
    catch(BindException be)
    {
      System.out.println("Service already running on port " +  SERVICE_PORT);
    }
    catch(IOException ioe)
    {
      System.out.println("I/O error - " + ioe);
    }
  }
}


Min klient klasse:

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

public class DaytimeClient
{
  public static final int SERVICE_PORT = 13;

  public static void main(String args[])
  {
    if(args.length != 1)
    {
      System.out.println("Syntax - DaytimeClient host");
      return;
    }

    String hostname = args[0];

    try
    {
      Socket daytime = new Socket(hostname, SERVICE_PORT);

      System.out.println("Connection established...");

      daytime.setSoTimeout(2000);

      BufferedReader reader = new BufferedReader(new InputStreamReader(daytime.getInputStream()));

      System.out.println("Results: " + reader.readLine());

      daytime.close();
    }
    catch(IOException ioe)
    {
      System.out.println("Error " + ioe);
    }
  }
}

Hvordan kommer jeg videre herfra ???
Avatar billede arne_v Ekspert
30. september 2004 - 23:35 #1
Wrap InputStream og OutputStream i ObjectInputStream og ObjectOutputStream, så kan
du skrive og læse objekter (som er serializable).
Avatar billede mikkel_sommer Nybegynder
01. oktober 2004 - 19:22 #2
Det lyder lovende arne har du et par kode eksempler som kan hjælpe forståelsen lidt på vej hos en nybegynder....?
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:25 #3
import java.io.Serializable;

public class DummyData2 implements Serializable {
  public int a;
  public int b;
}
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:25 #4
import java.io.ObjectInputStream;
import java.net.Socket;
import java.net.ServerSocket;

public class Server2 {
  public static void main(String[] args) throws Exception {
      ServerSocket ss = new ServerSocket(10000);
      Socket s = ss.accept();
      ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
      DummyData2 dd;
      dd = (DummyData2)ois.readObject();
      System.out.println(dd.a + " " + dd.b);
      dd = (DummyData2)ois.readObject();
      System.out.println(dd.a + " " + dd.b);
  }
}
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:26 #5
import java.io.ObjectOutputStream;
import java.net.Socket;

public class Client2Reset {
  public static void main(String[] args) throws Exception {
      Socket s = new Socket("localhost", 10000);
      ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
      DummyData2 dd = new DummyData2();
      dd.a = 1;
      dd.b = 2;
      oos.writeObject(dd);
      oos.reset();
      dd.a = 3;
      dd.b = 4;
      oos.writeObject(dd);
  }
}
Avatar billede arne_v Ekspert
01. oktober 2004 - 19:26 #6
data objekt + server + client
Avatar billede arne_v Ekspert
03. oktober 2004 - 15:06 #7
OK ?
Avatar billede mikkel_sommer Nybegynder
03. oktober 2004 - 19:36 #8
Tjekker lige om jeg kan få det til at virke så skal jeg nok vende tilbage med respons og point.
Avatar billede mikkel_sommer Nybegynder
06. oktober 2004 - 16:27 #9
Det virker helt fint tak for hjælpen
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