Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

Кто решал проблему разницы во времени между двумя компьютерами?   Найти похожие ветки 

 
Aleksandr ©   (2004-04-08 11:54) [0]

Программы на двух компьютерах связываются через сокеты. При этом в принимающей программе надо вычислить разницу в системном времени между ними. Тем, чтобы засечь время на первом и послать его второму, задачу не решить - пока передается пакет с информацией о системном времени, может пройти несколько миллисекунд. Скорее всего, при засекании времени на обоих на момент соединения будет то же самое. Есть еще какие-нибудь варианты?


 
Anatoly Podgoretsky ©   (2004-04-08 12:24) [1]

ntp раз в секунду


 
Verg ©   (2004-04-08 12:44) [2]


> Тем, чтобы засечь время на первом и послать его второму,
> задачу не решить - пока передается пакет с информацией о
> системном времени, может пройти несколько миллисекунд.


Вот и вопрос - с какой точностью?
Обычно это выясняется несколькими (например 10-20) запросами о времени подряд. При этом засекается реальное время между отправкой запроса и приемом ответа на каждый запрос. Минимальное и максимальное время ответа (почти RTT) отбрасываются. Остальные усредняются. Деленная пополам - это будет коррекция системного времени "того" хоста, полученного в последний раз. Ну а дальше разница между локальным временем и этим минус коррекция - будет разница во времени.
Если я правильно понял вопрос, то я бы так сделал.


 
panov ©   (2004-04-08 12:56) [3]

1. Посылается запрос на второй компьютер со своим временем.
2. Второй компьютер отслыает обратно свое время.
3. Отсюда вычисляется разница.

Для локальной сети 99% успешного определения разницы.
Для интернет хуже, но тоже достаточно точно, если взять усредненное между запросами. (Verg ©   (08.04.04 12:44) [2])


 
Aleksandr ©   (2004-04-08 14:03) [4]

2 Anatoly Podgoretsky : ntp - это что?

2 Verg : Наверное, это оптимально. А какая точность, не пробовали?

2 panov : К сожалению, основная проблема именно в том, чтобы разницу выяснить с точностью в +-2. Именно с такой погрешностью программы сверяют синхронность своих файлов (FileAge при конвертации с TDateTime "гуляет" на +2/-1, поэтому это допустимый диапазон). Большая разница приводит к запросу одной программы данных с другой, и если дельта времени была высчитана с погрешностью, в сети начинается бесконечный процесс пуляния данных друг другу - потому что время в них каждая программа ставит свое.


 
Sha ©   (2004-04-08 14:17) [5]

>Aleksandr ©   (08.04.04 14:03) [4]
А кто мешает самому ставить дату создаваемых файлов с нужной точностью, например +-минута?


 
Aleksandr ©   (2004-04-08 14:20) [6]

2 Sha : Как Вы себе это представляете?
DataList.Insert(DateTimeToFileDate(Now)+2-1)? К сожалению, такого в Делфи не сделаешь.  :)


 
Sha ©   (2004-04-08 14:36) [7]

Это почему же?
Кстати, еще лучше сравнивать с заданной точностью, не требуя полного совпадения.


 
Aleksandr ©   (2004-04-08 14:58) [8]

2 Sha: Увы, данные меняются с гораздо большей частотой. На одну секунду времени может приходиться 3-4 данных, и все они вставляются в коллекцию, сортируясь по времени. И только потому, что их время обработки юзает ту же погрешность в +-2, она допускается


 
Sha ©   (2004-04-08 15:03) [9]

Тогда надо навесить бирки на результаты и сравнивать не время создания, а бирки.


 
Anatoly Podgoretsky ©   (2004-04-08 15:07) [10]

И все они имеют инкриментный характер, тогда вообще не надо знать время ни одного из компьютеров.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.047 c
4-1082444220
Сережа550
2004-04-20 10:57
2004.05.30
EnumChildWindows


14-1084354404
Соловьев
2004-05-12 13:33
2004.05.30
Кто борол?


7-1081903856
HammeRBgu
2004-04-14 04:50
2004.05.30
Выход из спящего режима


3-1084283953
Sasha73
2004-05-11 17:59
2004.05.30
Как расшифровать данные


14-1084128355
VID
2004-05-09 22:45
2004.05.30
Как узнать в какой папке лежат файлы...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский