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

    [C++] socket.

    Sto sviluppando un programma scritto in c++ che lavora in rete per mezzo di socket.
    Come è possibile trasferire un oggetto da un server ad un client?
    E' possibile usare il protocollo rpc per tale cosa? Avete documentazione?

    Grazie mille, Denis.

  2. #2
    'Oggetto' in che senso? Dei dati? In tal caso è proprio alle socket che ti dovrai affidare, non ad RPC.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  3. #3
    Mi riferisco ad un oggetto generico tipo
    Codice PHP:
    class Oggetto {

    private:

    protected:

    public:
    char a[256];
    int b;
    struct Ciccio {
    int a;
    }


    Come faccio a spostarlo su e giù per la rete?

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Se intendi dire le proprietà di un oggetto (cio è ricordare ad un altro programma che una variabile è uguale a 3) basta che mandi l'oggetto convertito tramite socket e poi lo leggi.
    Esempio teorico

    codice:
    //per mandare si usa la funzione send
    send(sock,reinterptet_cast<void*>(&Cl1),sizeof(MiaClasse));
    chi deve ricevere farà

    codice:
    MiaClasse Cls;
    recv(sock,reinterpret_cast<void*>(&Cls),sizeof(MiaClasse));
    In questo modo Cls sarà uguale a Cl1 anche se non sono nello stesso programma.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  5. #5
    Se intendi dire le proprietà di un oggetto (cio è ricordare ad un altro programma che una variabile è uguale a 3) basta che mandi l'oggetto convertito tramite socket e poi lo leggi.
    Io credo che lui intendesse l'oggetto vero e proprio (in questo caso una classe comprensiva di metodi).
    Purtroppo non conosco C++. In python la cosa è fattibile tramite un modulo chiamato pickle che permette di convertire in byte stream l'oggetto e "riconvertirlo" allo stato originario. In pratica la soluzione ideale che servirebbe a te per spedirlo tramite socket.
    Sicuramente qualcosa di simile sarà disponibile anche per C++.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  6. #6
    Supponiamo che io lato server instanzi l'oggetto:

    Oggetto *oggetto= new Oggetto();
    oggetto->b= 12;

    Ora voglio mandare al client l'oggetto *oggetto in modo che lui poi possa accedere alla variabile 'b' ed ottenere il valore che esso contiene (12). Come posso fare?

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Ti ho scritto sopra come si fa, anche se in modo sommario.
    Mandi tramite socket all'altro pc l'oggetto in bytes e poi lo ricomponi.
    Se non vuoi usare i socket puoi anche salvare l'oggetto su file.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Sto studiando la tua soluzione che mi sembra molto valida. Potresti indicarmi dove trovare maggioni informazioni su tale cosa? In particolar modo non mi è chiaro cosa significhi

    <void*>

    Esiste una tecnica per fare in modo che colui che riceve l'oggetto sia in grado di capire che oggetto esso sia?
    Questa mia esigenza nasce dal fatto che non saprei come gestire la comunicazione prevedendo molti oggetti diversi tra loro.

    Grazie mille, Denis.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    Originariamente inviato da denis76
    Sto studiando la tua soluzione che mi sembra molto valida. Potresti indicarmi dove trovare maggioni informazioni su tale cosa? In particolar modo non mi è chiaro cosa significhi

    <void*>

    Esiste una tecnica per fare in modo che colui che riceve l'oggetto sia in grado di capire che oggetto esso sia?
    Questa mia esigenza nasce dal fatto che non saprei come gestire la comunicazione prevedendo molti oggetti diversi tra loro.

    Grazie mille, Denis.
    XWolverineX ti ha descritto come si fà giustamente.

    posso aggiungere:
    un'oggetto, come dati e quantaltro non sono altro che sequenze di byte.

    Il client e il server riconoscono una struttura perchè chi progetta appunto il client e il server sà cosa si devono comunicare quindi...


    sul client farai:
    struct t_bikeData
    {
    t_matrixComp mat[3];
    };
    e altrettatnto sul server

    sia dal client che dal server invii così:

    t_bikeData data;
    g_bike[idN].GetBikeData(&data);

    un esempio di invio dei dati:

    GAMEMSG_OKAY msgOkay;
    msgOkay.Data = data;
    strcpy(msgOkay.nome, NomePlayer);
    msgOkay.b=b;
    //invio
    send (socket, (const char*) &msgOkay, sizeof(GAMEMSG_OKAY), 0);

    //ricezione
    char rec[512];
    int bytes;
    bytes = recv((SOCKET)wParam, rec, sizeof(GAMEMSG_OKAY), 0);
    GAMEMSG_OKAY* pMsg = (GAMEMSG_OKAY*) &rec;
    g_bike[x].SetBikeData(&pMsg->Data);
    strcpy(CiaoFratello, msgOkay.nome);
    a=msgOkay.b;

    //naturalmente i dati inviati sono meno di 512 bytes


    la struct GAMEMSG_OKAY te la faì da solo...



    ciao
    Oki.lib Libreria per creare il proprio Engine del sound nei propri progetti
    http://www.twork.it/public/oki/guestbook.asp

    Sistemi di Gestione Studio e Sviluppo per giochi a pronostici
    http://www.twork.it/programmi/programmi.html

  10. #10
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Praticamente con il cast a char trasformi l'oggetto in un semplice flusso di byte e nella ricezione fai il contrario: flusso di byte a oggetto
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

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 © 2024 vBulletin Solutions, Inc. All rights reserved.