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

    Linguaggio C velocità di connessione di due host

    Salve a tutti, sono Alessia e se scrivo qui è perché sto sbattendo la testa da un paio di giorni su un problema
    In pratica ho un client e un server che comunicano tra di loro mandandosi delle semplici stringhe di testo, a me serve sapere la velocità con cui comunicano.
    sia il codice client che server sono scritti in c e per adesso sono in locale.

    Grazie a tutti coloro che mi daranno una mano

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Nel client salvati il timestamp appena prima di inviare e non appena ricevi, poi fai la differenza, no?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3

    grazie :)

    avevo pensato pure io a fare qualcosa del genere e poi dividere per la dimensione in bytes della stringe inviata, ma speravo che ci stava qualche funzione meno "rudimentale" di questi passaggi

  4. #4

    problema

    Vi riporto una porzione del mio codice:

    time_t now1 = time (NULL), now2 = time (NULL), now3 = time (NULL);
    asctime (localtime (&now1));
    printf(" Message:%s\n",buf);
    result = send(sd, buf, strlen(buf), 0);
    printf(" %d bytes of data were sended.\n", result);
    asctime (localtime (&now2));
    now3=now2-now1;
    printf(" Time: %d\n",now3);

    ovviamente qualcosa nel timestamp la sto sbagliando, perchè mi stampa sempre 0

  5. #5
    time ha una granularità di 1 secondo, per cui se la send ci mette meno di un secondo vedrai sempre zero come delta. Devi usare una funzione più precisa (ad esempio gettimeofday o simili).

    Tra parentesi, cronometrare la send non ti dice niente sul tempo di trasmissione - la send non attende che i dati siano effettivamente stati ricevuti dall'altro capo del socket.

    Piuttosto, dovresti dire se quello che ti interessa è la latenza (=il tempo che ci mette un pacchetto ad arrivare dall'altro capo del socket) o la banda (=quanti bytes al secondo si riescono a trasmettere/ricevere).
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6

    grazie

    quello che a me interessa è la banda (quanti bytes al secondo si riescono a trasmettere/ricevere).

  7. #7
    Il problema è che misurare in maniera precisa la velocità di scambio di brevi stringhe di testo di lunghezza variabile è complicato avere risultati sensati... per avere una buona misura la cosa migliore sarebbe avere un qualche sistema per dire al server "inviami tot KB di dati", e il server invia prima un qualche genere di messaggio di start immediatamente seguito dai dati. Il client dopo aver inviato il messaggio aspetta il messaggio di start, dietro cui sa che ci sono immediatamente i dati; cronometrando la recv immediatamente successiva (con cui leggere tutti in una volta i dati) si ottiene la banda. Il messaggio di start è fondamentale in modo che non vengano incluse nella misurazione tutte le varie latenze.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8

    ti ringrazio

    Sei stato molto chiaro. ho seguito il tuo consiglio e penso di aver risolto, anche se facendo le prove in locale il tempo di invio e ricezione è molto basso.

  9. #9
    Be', in locale è normale che sia estremamente veloce, i socket diventano più o meno equivalenti a delle pipe e la comunicazione si riduce alla copia da/a un buffer nel kernel e qualche context switch.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.