Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626

    [C] socket, domanda su send/recv

    Ciao a tutti,
    Fino ad ora mi è capitato di usare i socket solo per progetti universitarì, ma a disanza di anni mi è sorto il dubbio che questi funzionassero solo perchè provati in locale su una sola macchina.
    Tipicamente, facevo qualcosa del tipo:

    server/client:
    codice:
    char buffer[BUFF_SIZE];
    ...
    // riempio buffer
    ...
    send(socket, buffer, message_size, 0);
    // nel caso buffer contenga una stringa message_size = strlen(buffer);
    ...
    client/server
    codice:
    char buffer[BUFF_SIZE]
    ...
    nBytes = recv(socket, buffer, BUFF_SIZE, 0);
    ...
    // processo buffer
    A questo punto il dubbio: è possibile, in uno scenario reale, che recv non riceva tutta la trasmissione, ma sono una parte (rete lenta, messaggio grande) ?
    In caso affermativo, come mi assicuro di leggere tutto il messaggio inviato (o al contrario, non leggere anche un eventuale pezzo di un secondo messaggio) ?

    Nel caso di stringhe, pensavo di controllare se l'ultimo byte fosse '\0', in caso negativo leggere (aggiungere a buffer) byte per byte fino a trovare il terminatore della stringa.
    Nel caso invece di dati "binari" ? conviene che i(l) primo/i byte contengano la dimensione del messaggio?


    Secondo voi è un problema da affrontare nei casi reali, o mi sto perdendo in un bicchier d'acqua?

    Grazie a tutti

  2. #2

    Re: [C] socket, domanda su send/recv

    Originariamente inviato da boots
    A questo punto il dubbio: è possibile, in uno scenario reale, che recv non riceva tutta la trasmissione, ma sono una parte (rete lenta, messaggio grande) ?
    Certamente, e può avvenire anche in rete locale.

    Originariamente inviato da boots
    In caso affermativo, come mi assicuro di leggere tutto il messaggio inviato (o al contrario, non leggere anche un eventuale pezzo di un secondo messaggio) ?

    Nel caso di stringhe, pensavo di controllare se l'ultimo byte fosse '\0', in caso negativo leggere (aggiungere a buffer) byte per byte fino a trovare il terminatore della stringa.
    Nel caso invece di dati "binari" ? conviene che i(l) primo/i byte contengano la dimensione del messaggio?


    Secondo voi è un problema da affrontare nei casi reali?
    Assolutamente sì. E grossomodo ti sei già dato le risposte. In altre parole, va definito un protocollo a livello applicativo (o se ne utilizza uno già esistente).

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Ci avrei scommesso che non poteva essere così semplice

    Grazie per l'aiuto, in futuro dovrò tenere in considerazione questa cosa.

    Se qualcun altro vuole aggiugere qualcosa è il benvenuto

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.