Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [C#] socket & stream oggetti

    buona sera,

    ho un po' studiato il socket con C# e sembra essere molto semplice..
    solamente che per ora so solo inviare stringhe tra host e server... utilizzando i flussi.
    Ma io mi chiedevo se fosse possibile trasferire veri e propri oggetti.. sia oggetti già definiti nel .net framework, oppure oggetti definiti con le classi nelle mie due applicazioni server e client.. se si, come sirealizza questo scambio di oggetti?

    grazie mille
    Programmazione .NET
    http://www.samueletosatto.tk

  2. #2
    Tramite la serializzazione puoi scrivere un oggetto su uno stream qualunque, compreso uno stream di rete (che funziona tramite i socket).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    scusa se rispondo dopo tempo, ma non mi sono potuto collegare prima.
    Mi potresti fare dunque un'esempio?
    E la serializzazione funzionerebbe anche se le due applicazione che mandano e ricevono sono differenti, cioè mi spiego meglio:

    mettiamo che entrambe abbiano una classe myClass identiche. Si possono dunque scambiare un'oggetto di tipo myClass senza alcun problema pur essendo applicazioni diverse?
    Programmazione .NET
    http://www.samueletosatto.tk

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ovviamente si.. attento che l'utilizzo delle socket non è affatto semplice..

    le classi sono apparentemente semplici da usare ma il loro utilizzo nasconde gran parte dell'implementazione.. ricordo che sono classi wrapper e quindi ti permettono di gestire ad alto livello la trasmissione di dati ma che facilmente sono soggette a malfunzionamenti se utilizzate "in allegria"..

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ad esempio, se hai 2 soket, uno client ed uno listener, uno serializza l'oggetto e lo invia al listener, l'altro riceve la comunicazione, crea il socket per la ricezione, riceve i byte e deserializza..

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Sì ma anche in questo contesto a volte è come entrare in un labirinto dove se c'è un'uscita, ce n'è una sola e difficile da trovare.

    Una semplice classe è facile da trasmetter mediante serializzazione (a patto che sia definito l'attributo "serializable"), ma che dire della serializzazione di un "usercontrol"? E che dire della serializzazione di un oggetto usercontrol che ospita più oggetti usercontrol aggiunti dinamicamente in quantità sempre differenti?

    Gli oggetti grafici, per poter utilizzare le proprietà quali "background", size etc necessitano di ereditare dalla system usercontrol, la quale però non è serializzabile.

    per quanto riguarda il colloquio client/server sono solidale: non è proprio così semplice soprattutto per la gestione multiuser.

  7. #7
    Codice PHP:
        public void sendData(int x,int y,Stream stream)
        {
            try
            {
                
    Stream str;
                
    IFormatter formatter = new BinaryFormatter();
                
    str stream;
                
    formatter.Serialize(str, new MyClass(xy));
                
    str.Close();
            }
            catch (
    SerializationException ex) { }
        }

    public 
    void reciveData(Stream stream)
        {
            try
            {
                
    Stream str;
                
    IFormatter formatter = new BinaryFormatter();
                
    str stream;
                
    MyClass mc formatter.Deserialize(str);
                
    str.Close();
                
    Console.WriteLine(mc.ToString());
            }
            catch (
    SerializationException ex) { }
        } 
    questi due metodi non vanno bene?
    beh non funzionano i tipi che gli passo, perchè io gli passo all'argomento stream di sendData uno streamWriter, e invece a reciveData, nell'altra applicazione, uno StreamReader... e i tipi non sembrerebbero coincidere... io credevo che StreamReader ereditasse da stream, ma a quanto pare non è così

    come devo impostare il codice? non capisco... ho anche reo la classe serializzabile e tutto.
    Boh!!!! mi serve solo inviare e ricevere un'oggetto, nulla più...
    Programmazione .NET
    http://www.samueletosatto.tk

  8. #8
    Codice PHP:
        public static void reciveData(NetworkStream stream)
        {
            try
            {
                
    Stream str;
                
    IFormatter formatter = new BinaryFormatter();
                
    str stream;
                
    MyClass mc = (MyClass)formatter.Deserialize(str);
                
    str.Close();
                
    Console.WriteLine(mc.ToString());
            }
            catch (
    SerializationException ex) { }
        }
        public static 
    void sendData(int x,int y,NetworkStream stream)
        {
            try
            {
                
    Stream str;
                
    IFormatter formatter = new BinaryFormatter();
                
    str stream;
                
    formatter.Serialize(str, new MyClass(xy));
                
    str.Close();
            }
            catch (
    SerializationException ex) { }
        } 
    Così non funziona, anche se non da errori ne eccezioni... sapreste trovare il motivo del perchè non funziona?

    Anzi scusate, modifico:

    Ho notato che il programma lancia un'eccezione sul reciveData... precisamente sul formatter.Deserialize();

    come mai?
    Programmazione .NET
    http://www.samueletosatto.tk

  9. #9
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    intanto controlla cosa dice l'eccezione e riporta l'errore..

  10. #10
    Impossibile trovare l'assembly 'ConsoleApplication2, version=1.0.0.0, Culture=neutral, PublicKeyToken=null'

    che vuol dire? boh! forse è appunto il problema è che non è possibile passare un oggetto di una classe creata dall'utente da un'applicazione ad un'altra... è possibile?
    Programmazione .NET
    http://www.samueletosatto.tk

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.