Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA] Object tra Client e Server

    Ho un Object su un programmino Server, questo Object (di pochissimi byte) deve essere passato al Client, il quale dovra' leggerlo adeguatamente.

    Ho provato sia UDP che TCP, ho provato a convertire l'object in string, ma PERDO INFORMAZIONI sull'oggetto, quindi nisba.

    Ho adottato, quindi, la soluzione di usare un ObjectOutputStream e un ObjectInputStream (entrambi bufferizzati), cioe' gli unici due stram che sembrano potersi scambiare un object. E qui un altro grosso problema, ricevo un "WriteAbortedException", cioe' il Server non riesce ad inviare l'oggetto; come risolverlo?

    Di seguito il pezzo di codice incriminato, vi basti sapere che io DEVO passare l'Object senza perdita di informazioni (quindi non posso convertirlo a string o byte[], perche' perdo info sull'Object) e soprattutto in un ambiente di rete (quindi non in locale).

    Si assume anche che i socket e tutto il resto siano funzionanti, quindi il problema e' proprio nell'invio dell'oggetto (troppo grande?). Come poter rendere suddividere l'invio in blocchi, che ne so, da 8 byte, senza usare i byte[]?

    Server - Invio
    codice:
      BufferedOutputStream bos = new BufferedOutputStream(os);
      ObjectOutputStream objStream = new ObjectOutputStream(bos);
      objStream.writeObject(oggetto);
      objStream.flush();
      objStream.close();
    Client - Ricezione
    codice:
      BufferedInputStream bis = new  BufferedInputStream(is);
      ObjectInputStream objStream = new ObjectInputStream(bis);
      oggetto = objStream.readObject();
      objStream.close();
    [Homepage] [Contattami]
    Powered by: Ubuntu - Debian - Gentoo
    Developing: Java - C++ - PHP

    [supersaibal]"Perchè tanto Debian è meglio"
    [/supersaibal]

  2. #2
    "os" e "is" penso che siano output e input stream, ma come li hai dichiarati?

    Cmq nn capisco perchè perdi dei dati trasformando l'oggetto in stringa:

    class TuoOggetto
    {
    private campo1;
    private campo2;
    ecc.
    }

    //server:
    out.println(campo1+";"+campo2+";"+ecc.);
    //out è di tipo PrintWriter

    //client:
    String read;
    read=in.readLine();
    //poi usi un'oggetto StringTokenizer per recuperare tutti i campi

    se i tuoi campi sono anche loro oggetti la cosa sarà un pò più complessa ma comunque fattibile

  3. #3
    Originariamente inviato da bovino666
    "os" e "is" penso che siano output e input stream, ma come li hai dichiarati?

    Cmq nn capisco perchè perdi dei dati trasformando l'oggetto in stringa:

    class TuoOggetto
    {
    private campo1;
    private campo2;
    ecc.
    }

    //server:
    out.println(campo1+";"+campo2+";"+ecc.);
    //out è di tipo PrintWriter

    //client:
    String read;
    read=in.readLine();
    //poi usi un'oggetto StringTokenizer per recuperare tutti i campi

    se i tuoi campi sono anche loro oggetti la cosa sarà un pò più complessa ma comunque fattibile
    E' ovvio che is e os sono dichiarati!
    Il mio Object in realta' e' un Vector di Vector di Vector... credi sia abbastanza complesso da trasformare in Stringa? io penso di si? oltretutto ti posso assicurare che la perdita di informazione c'e' e me lo conferma anche la getClass dell'object.
    Poi voglio fare una comunicazione di rete... a che mi serve stampare a video e riprenderlo con la readline? il Server ed il Client devono comunicare con i socket...
    [Homepage] [Contattami]
    Powered by: Ubuntu - Debian - Gentoo
    Developing: Java - C++ - PHP

    [supersaibal]"Perchè tanto Debian è meglio"
    [/supersaibal]

  4. #4
    UP!!!!

    ho provato a salvare l'oggetto in un file e mandare il file (cosa che so fare senza problemi), solo che ricevo lo stessa eccezione!

    AIUTATEMI vi prego!!!!

    [Homepage] [Contattami]
    Powered by: Ubuntu - Debian - Gentoo
    Developing: Java - C++ - PHP

    [supersaibal]"Perchè tanto Debian è meglio"
    [/supersaibal]

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    Domanda banale: L'interfaccia Serializable è implementata dall'oggetto che vuoi trasmettere?

    ciao.
    Slack? Smack!

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    1,798
    codice:
    L'oggetto da trasmettere:
    -------------------------
    import java.io.*;
    public class Counter implements Serializable ...
    
    Il client:
    ----------
    import java.net.*;
    import java.io.*;
    
    public class ClienteCC
    {
       public static void main(String args[])
       {
           Counter c = new Counter();
           Socket s = null;
           c.inc();
           System.out.println("Valore Contatore: " +  c.rd());
           try {
                s = new Socket("localhost",11112);
    	    ObjectInputStream is = new ObjectInputStream(s.getInputStream());
    	    ObjectOutputStream os = new ObjectOutputStream(s.getOutputStream());
    	    os.writeObject(c);
    	    c = (Counter)is.readObject();
    	    System.out.println("Valore Contatore: " +  c.rd());
    	    os.close();is.close(); s.close();
    	}
    	catch (Exception e)
    	{
    	    System.err.println(e);
    	}
        }
    }
    
    Il server:
    ------------------
    import java.net.*;
    import java.io.*;
    public class ServerCC
    {
        public static void main(String args[])
        {
            Socket cs = null; ServerSocket ss = null;
    	Counter c;
    	try {
    	     ss = new ServerSocket(11112);
    	     while (true)
    	     {
    	         // ciclo infinito
    		 cs = ss.accept();
    		 ObjectOutputStream os = new ObjectOutputStream(cs.getOutputStream());
    		 ObjectInputStream is = new ObjectInputStream(cs.getInputStream());
    		 C = (Counter)is.readObject();     System.out.println("Ricevuto contatore con  valore: " + c.rd());
    		 c.inc();
    		 os.writeObject(c);
    		 os.close();
    		 is.close();
    		 cs.close();
    	     } // end while
            }
    	catch (UnknownHostException e)
    	{
    	    System.err.println("Host unknown");
    	}
    	catch  (Exception e)
    	{
    	    System.err.println(e);
    	}
        }
    }
    Questo esempio mi fu molto esaustivo.

    ciao.
    Slack? Smack!

  7. #7
    Io nn ti chiedevo se li avevi dichiarati, ma come li hai dichiarati

    comunque la println() e readLine() non sono sono legate a schermo e tastiera:

    ...
    private ServerSocket serverSocket=null;
    private Socket socket=null;
    private BufferedReader in=null;
    private PrintWriter out=null;
    ...
    try {
    serverSocket = new ServerSocket(1234);
    socket = serverSocket.accept(); //
    in = new BufferedReader(
    new InputStreamReader(socket.getInputStream()));
    out = new PrintWriter(
    new BufferedWriter(
    new OutputStreamWriter(socket.getOutputStream())), true); //true=autoflush
    }
    poi usi in.readLine() e out.println()

    con queste puoi passarti le stringhe dal server al client ma effettivamente con quello che devi spedire tu non penso sia molto adatto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.