Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    41

    [C] invio dati su socket

    Ciao a tutti,
    devo creare un client che invii al server, tramite socket, un messaggio contenente un header e un corpo.
    L'header è composto per i primi 16 byte da tutti 1 (e quindi 128 bit a 1). Come faccio ad inviare questi, tramite un buffer, dato che il buffer usato dalla send() è di tipo char * ?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Dove sta la difficoltà che incontri nel tuo codice? Hai provato a scriverlo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    41
    Originariamente inviato da oregon
    Dove sta la difficoltà che incontri nel tuo codice? Hai provato a scriverlo?
    Beh, non sapendo come salvare 16 byte a 1 nel buffer no, ma suppongo debba essere qualcosa del tipo
    codice:
         buf="1111111111111111111111"; //128 bit a 1     buf[17]='\0';     result = send(s, buf, strlen(buf), 0);
    Anche se ovviamente il contenuto di buf[] non è quello corretto, perchè in questo modo non pongo 128 bit a 1.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    16 byte con tutti i *bit* a 1 vuol dire che ogni byte è uguale a 255 ...

    Quindi

    codice:
    char buf[16];
    
    memset(buf, 255, 16);
            
    ...
    
    result = send(s, buf, 16, 0);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Grazie per la condivisione!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    41
    Approfitto del topic per chiedere un'altra cosa sempre riguardante l'invio di messaggi su socket.

    Nell'header del messaggio da inviare dal mio client al server, c'è un campo lungo 2 byte che rappresenta la lunghezza. Questo campo è espresso in byte e rappresentato in network byte order.

    Su due piedi direi che basterebbe, per poter inviare questo campo tramite il buffer di tipo char * della send(), porre la lunghezza del messaggio come stringa.
    ad esempio char buf "13" e inviarla con la send: result = send(s, buf, strlen(buf), 0).
    Invece in questo modo non sarebbe in network byte order e quindi bisognerebbe trasformarlo in una variabile di tipo uint16_t tramite la inet_aton(), passandogli la stringa e una struttura in_addr *.
    Il problema è che ora, questo numero in binario deve andare nel famoso buffer utilizzato dalla send(). Ma come fare?

    Il professore ci ha detto che quei due bytes rappresentano un numero binario su 16 bit che a loro volta devono essere convertiti in network byte order per poter essere trasmessi. Quindi non si può parlare di sicuro di caratteri ascii da inviare.
    Ma l'interpretazione è abbastanza difficile, almeno per me.

    Chi può aiutarmi?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non ho capito bene ... dove sono questi due byte? Perché li devi inserire nel buffer ? Non puoi inviarli e basta?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    41
    Originariamente inviato da oregon
    Non ho capito bene ... dove sono questi due byte? Perché li devi inserire nel buffer ? Non puoi inviarli e basta?
    Questi due byte fanno parte del messaggio che devo inviare. Siccome so com'è strutturato, posso permettermi di inviare un tot di byte alla volta (ad esempio prima dei byte che identificano la lunghezza c'è un altro campo, quindi invio prima quello).
    Li devo inserire nel buffer perchè è l'unico modo per inviarlo con la send, che infatti riceve come parametri int socket, char *buffer, int datalen, int flags. C'è un modo per "inviarli e basta"?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Il "buffer" è un concetto estendibile a qualsiasi zona di memoria, compresi i due byte in questione ...

    Se hai una variabile numerica (short 2 byte) la puoi inviare a partire dal suo indirizzo in memoria ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    41
    Originariamente inviato da oregon
    Il "buffer" è un concetto estendibile a qualsiasi zona di memoria, compresi i due byte in questione ...

    Se hai una variabile numerica (short 2 byte) la puoi inviare a partire dal suo indirizzo in memoria ...
    Scusa me se il buffer è un vettore di caratteri, non sono obbligato a portare i miei due byte in un vettore di caratteri? Altrimenti che senso avrebbe ricevere come parametro un char * ?

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.