C # сокет, время, прошедшее во время отправки - PullRequest
1 голос
/ 16 декабря 2009

Хотелось бы узнать, был ли способ узнать время, прошедшее во время передачи данных по сети.

Например, я отправляю пакет с компьютера A на компьютеры B и C (поэтому прошедшее время может быть разным для каждого в зависимости от расстояния и т. Д.), И я хочу знать время между отправкой и получением для каждого клиента ( для точной синхронизации данных).

Кроме того, важно знать, что мой клиент ДОЛЖЕН работать в асинхронном режиме (это не проблема).

Кто-нибудь знает, как это сделать?

кайт.

Ответы [ 2 ]

2 голосов
/ 16 декабря 2009

Corvil - это хорошо известное программное обеспечение, специально предназначенное для анализа задержки.
Для вашего анализа используется несколько разных уровней программного и аппаратного обеспечения, и поэтому его очень сложно реализовать.
Когда дело доходит до синхронизации, более важно иметь надежный ключ, такой как порядковый номер - при использовании TCP возникает большая проблема, когда возникает проблема с потерей пакета, поскольку это вызывает получение нескольких пакетов.

0 голосов
/ 16 декабря 2009

Если у всех ваших узлов нет синхронизированных часов, это было бы почти невозможно сделать. Если у вас есть точный механизм синхронизации и вы можете верить, что часы одинаковы, тогда вы можете просто вставить метку времени в пакет, когда отправляете его из A, а затем в C, сравнить его с текущим временем.

Но опять же, вам нужна синхронизация с высоким разрешением, чтобы этот подход работал.

Что вы могли бы сделать, если вы просто хотите сравнить и получить представление о среднем времени, так это заставить пакет отскочить назад. По сути, скажите С отправить этот же пакет обратно В, а затем А, а в А вы сравниваете исходную временную метку с текущим временем (которое будет использовать те же часы). Это даст вам задержку в оба конца, которую вы можете разделить на два, чтобы получить время задержки в одну сторону.

Если вы беспокоитесь о накладных расходах, добавляемых отправкой сообщений назад, то вы можете выполнить одно (или оба) следующее

  1. Отправьте намного меньший пакет обратно. В основном целое число, соответствующее порядковому номеру полученного сообщения
  2. Отправляйте ACK только каждое N-е сообщение. Должно предоставить достаточно данных, чтобы знать «типичное» время задержки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...