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

    [c/c++] invio dei dati via rete

    ciao

    scusatemi se apro un'altro post su questo argomento ma penso che sia sostazialmente diverso da quello che ho aperto (e che grazie al vostro aiuto ho risolto) ieri.

    dunque vorrei qualche chiarimento sul trasferimento dei dati via rete, i dati possono essere inviati solo come stringhe? e poi vanno fatti i relativi cast o è possibile inviare i dati in formato binario (credo e spero di si ;-) )

    ad esempio: se io volessi inviare il contenuto di un array ...come posso fare?

    e di un array multimensionale?

    e se volessi inviare un oggetto addirittura? (non arebbe senso mandare il puntatore dell'oggetto...) che sene fa l'altra macchina di un indirizzo di memoria che punta chissà dove?

    grazie mille
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  2. #2
    beh...tramite rete puoi inviare dei dati...numeri...stringhe...oggetti...sono solo dati

    oggetti...nell'elenco stona, xche in realtà non puoi mandare un'oggetto...xche un'oggetto ha certi riferimenti in memoria e mandare un puntatore non avrebbe senso...xo puoi mandare TUTTE le propietà di un singolo oggetto...in modo che il soft che riceve le info possa creare un'oggetto con le propietà del primo e quindi lavorare usando i settaggi del primo

    via rete puoi mandare solo dati...dati...ovvero byte...quello che ci sta li dentro è una sua scelta...se vuoi mandare stringhe...se vuoi scriverti un protocollo...quello che vuoi ma sono solo, come dici tu, stringhe ))

  3. #3
    ciao

    ti ringrazio della risposta, ma quindi, se io volessi inviare il contenuto di un array...cosa dovrei fare? e quali librerie dovrei utilizzare?

    ad esempio ora sto usando una libreria cnaiapi.h che ho trovato sul libro di testo che ci hanno consigliato all'uni x il corso di reti...

    ti posto un pezzo di codice:

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <cnaiapi.h>
    #include <unistd.h>
    
    int main(int argc,char **argv){
    
      computer comp;
      appnum app;
      connection conn;
    
      //definizione dati
      char saluto[]={"ciao come va\r\n"};
     
      if (argc<2||argc>3){
        fprintf(stderr,"utilizzo: %s <indirizzo server> [porta]\n",argv[0]);
        exit(1);
      }
    
      /*converte gli argomenti passati nel nome macchina e nella porta*/
    
      comp=cname_to_comp(argv[1]);
    
      if(comp==-1){
        exit(1);
      }
    
      if (argc==3){
        app=(appnum)atoi(argv[2]);
      }else{
        if((app=appname_to_appnum("echo"))==-1){
          exit(1);
        }
      }
    
      /*viene stabilita una connessione con l'echoserver*/
      
      conn=make_contact(comp,app);
    
      if(conn<0){
        exit(1);
      }
    
    //invio i dati al server
    
        send(conn,saluto,strlen(saluto),0);
      
    return 0;
    }
    questo semplice programmino chiamato con

    #nome_programma <ip_server> [porta]

    invia la stringa "ciao come va" al server sulla porta scelta...se volessi mandare il contenuto di un array ...cosa dovrei fare?

    grazie

    (ora che ci penso...una stringa è un'array...) quindi non dvrei fare niente? e dall'altra parte come ricevo i dati e li assegno all'array?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  4. #4
    costruisciti una stringa con il contenuto di un'array

    creati una funzione implode che non fa altro che "imploderti", ovvero unirti, una stringa da un'array tramite un separatore

    ovvero...
    se hai un'array di X elementi...devi calcolarti lo spazio totale di memoria che hai bisogno...quindi hai bisogno di sapere quanti byte occupa l'array in totale...a questo punto aggiungi a questo spazio lo spazio necessario per i delimitatori...essendo che il delimitatore che si sceglie può essere + di un carattere...devi fare una cosa tipo questa

    array è l'array passato
    str_size è la dimensione della stringa

    codice:
    int array_numelements = sizeof(array) / sizeof(array[0]);
    .
    . calcoli la memoria necessaria per i vari elementi nell'array
    .
    str_memsize += (strlen(delimiter)-1) * array_numelements;
    str_memsize++;
    alla fine aggiungo un carattere in + per il NULL finale
    usi malloc...ti allochi la memoria necessaria e ti crei la stringa con il contenuto che ti serve...
    per copiare all'interno usi le funzioni per le stringhe...o direttamente lavori usando il puntatore vedi un po tu

    PS: fatto cosi ci deve essere almeno un'elemento nell'array, ovvero l'elemento zero, altrimenti ti becchi un bel segfault sulla riga che calcola

    PS2: non so se esiste l'implode o il join in, cosa possibile, cmq da un punto di vista di studio potresti provare a costruirtelo tu

    PS3: quello che effettivamente ti rimane da fare è di calcolare la dimensione necessaria per il contenuto dell'array e poi assemblare tutto

    PS4: non prendere in parola quello che ho scritto...vedi se effettivamente calcola correttamente la memoria necessaria prima di metterti a scrivere il resto senno rischi di perdere un sacco di tempo poi per capire xche non va

    sciauz

  5. #5
    ma allora alla fine è come dicevo io!

    si usano le stringhe...

    grazie x l'aiuto! ti farò sapere...

    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

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.