ntp mit c++ einbinden



  • hallo allerseits,
    ich möchte verschiedene datentypen über sockets zwischen 2 pcs hin und her schicken und die zeit messen, die sie benötigen. dazu brauche ich die genaue zeit und zwar bei server und client. wie kann ich unter linux und c++ das ntp in meinen server bzw client einbinden?
    ich hoffe, das war verständlich!?



  • ich hoffe, das war verständlich!?

    Noe !
    Ok, nun mal langsam ! 😃

    ntp ist ein protokoll um die lokalen Systemclocks, mit werten eines Timeservers abzugleichen (sysnchronisieren). Das braucht man fuer automatische Sommer/winterzeitumstellung (sofern der Client das ned selber tut) sowie damit Serverdienste ned ausm Ruder laufen, die auf die Zeitstempel der Dateien fuer die Verwaltung angewiesen sind ... (CVS, NFS ... etc)

    Willst du Zeitdifferenzen messen, ist es immer unguenstig von 2 Zeitquellen die zeiten zu nutzen ... und warum auch ...

    Schickst du die daten ueber die Sockets raus, nimmst die lokale Rechnerzeit beim start, wartest bis dein programm und der socket mit dem letzen Packet mit der Sendung fertig ist, und nimmst die Zeit wieder.
    Voiala, hast die Zeitdifferenz. Hat mit ntp nix zu tun !

    Jedes BS stellt fuer Die systemzeit gewisse funktionen zur verfuegung, die mehr oder weniger genau sind. unter Windows sollte man die sogenannten Ticks nehmen, die sind schneller zu erfragen und haben kleinere aufloesung als wie die Systemzeit ... ansonsten musst riesige Datenmengen verschicken um nen einigermassen genaues Zeitverhalten zu bekommen ....

    Ciao ...



  • danke für die prompte antwort! aber ich denke wir haben aneinander vorbeigeredet. ich möchte die zeit messen, die die sockets brauchen, bis sie vollständig am server angekommen sind, d.h. der server muss die exakt selbe zeit wie der client haben. dehalb ntp!
    mfg s.-a.



  • Ahm, was willst du genau messen ?

    die Zeitsynchronisierung ist immer problematisch, selbst wenn diemit ntp "einigermassen" hinbekommst !
    Die systemuhr mit ntp bekommst nur max auf die sekunde genau gestellt, und selbst das nicht 100% sicher. beim hochfahren des rechners kann man ntp so configurieren, das er nicht sofort abgleicht, sondern nach paar minuten erst. in der zeit koennen die Zeiten schon paar sekunden abweichen. Wenn die zeitdifferenz zu gross ist, wird ntp gar nimmer synchroniesieren. In allen diesen faellen ist deine Messung fuer die Katz.

    Was ich damit sagen will, bezieh dich nur auf eine Uhr !

    Du kopierst dateien ueber sockets, also nehm ich an du verwendest TCP und nicht udp. Bei TCP muesste man theorethisch aus dem Protokoll rausbekommen, wann das letzte packet den Empfaenger server erreicht hat (es schickt ja intern nen Besatetigung Packet) ... also kannst die zeitdiffernz auf den sende-computer realisieren, und brauchst die zeit aufn server ned.
    Da muesstest dich mit der TCP implementierung genauer beschaeftigen. Ueber Sockets kommst da glaub ich ned rann.

    Wenn du es nicht auf 1/1000 bit/s genau brauchst, und deine TestDateien gross genug sind (oder du lange genug dein socket beschiesst), dann kannst es auch vereinfachen. Der Buffer im socket ist ned unendlich gross, und wenn er einmal voll ist, nimmt er keine daten mehr an, sprich er blockiert deinen Thread, weiter gehts erst, wenn die daten raus sind. Also kannst vereinfacht die zeit nehmen, von start des erstens befuellens deines sockets, bis der socket die letzten daten entgegen genommen hat ... das duerfte fuer die meisten ausreichend genug sein.

    Gehst du dagegen uber UDP, dann musst eh bestaetigungs Packete schicken fuer die konsistenz deiner daten ... damit kannst die zeitmessung selber implementieren.

    Willst dagegen die latenz von deiner verbindung testen, bau dir nen ping nach !

    Ich weiss ned ganu was und wie du genau messen willst, aber die Loesung mit den Zeiten auf beiden servern wird dir mehr probleme einbringen und ungenauer sein als wie die auf einem server realisierte !

    ich möchte verschiedene datentypen über sockets zwischen 2 pcs hin und her schicken und die zeit messen, die sie benötigen.

    Geht es dir nur darum, zu ermitteln, welcher datentyp langer braucht und in welchen umfang, dann brauchst das ned zu messen 🙂
    Ubertragungszeit ~ groesse ... wenn keine Kompression eingeschalten hast !
    gilt auch nur wenn die typen gross genug sind. Wennd eine datentypen klein sind, kommts auch aufn fuellungsgrad deiner packete an !

    Ciao ...



  • ich habe erst angefangen daran zu arbeiten, aber soweit ich mir das überlegt habe will ich die zeit verschiedener datentypen mehrmals messen und dann verschiedene statistiken machen(z.b. durchschnittszeit usw) und eventuell optimieren. ich will auch arrays von datentypen messen. und das ganze soll dann auch noch syncron(mit zurücksenden) und asyncron(ohne zurücksenden) geschehen. die übertragung soll mit tcp realisiert werden.

    danke für deine antwort. mal sehen wie ichs hinbekomme.....
    s.-a.



  • RHBaum schrieb:

    Die systemuhr mit ntp bekommst nur max auf die sekunde genau gestellt, und selbst das nicht 100% sicher.

    Normalerweise sollte NTP glaube ich auf 128ms oder so genau gehen.



  • Normalerweise sollte NTP glaube ich auf 128ms oder so genau gehen.

    Man bekommts auch "genauer" hin, je nach dem welchen Level dein NTP-Server hat und wie die Anbindung ist.
    Nur synchroniesiert halt NTP nicht immer sofort, sondern schwankt um den Synchronwert, je nach Qualy deiner Systemuhr.
    Und die Anbindung zum TimeServer spielt auch noch mal ne grosse rolle. Also genauer wie eine Sekunde wuerd ich ned erwarten !

    Ciao ...



  • RHBaum schrieb:

    Normalerweise sollte NTP glaube ich auf 128ms oder so genau gehen.

    Nur synchroniesiert halt NTP nicht immer sofort

    Das ist ja einer der großen Vorteile des ntpd, wenn Du "sofort" synchronisieren möchtest nimmst Du ja auch ntptimeset oä.

    Und die Anbindung zum TimeServer spielt auch noch mal ne grosse rolle. Also genauer wie eine Sekunde wuerd ich ned erwarten !

    Du musst ja auch mindestens 3 verschiedene Timeserver angeben und zusätzlich wird noch mit Driftfiles gearbeitet; kurz gesagt mit dem "Advanced RTC"-Modul und ntpd erwarte ich sehr wohl dass die Uhr meines Rechner zumindest auf ein paar hundert Millisekunden genau geht.


Anmelden zum Antworten