2016-07-20 1 views
-2

私はサーバとクライアントの間の時間を同期させる必要があります。ミリ秒の送信時間が必要です。 TCPプロトコルの特性によって、送信された時間についての内部コントロールがあり、タイマーがTCPソケットを受け取ったと考えられますが、TcpSocketClientを使用して取得する方法が見つかりませんでした。ソケット送信の送受信間の正確な経過時間を取得するにはどうすればよいですか?

あなたがまだ見送られていない場合、サーバーはクライアントに時間を伝え、クライアントはこの時間と同期しています。時間を調整してサーバーから時刻を送信する必要がありますクライアント!

私のクライアントはモバイルで、私はちょうどアプリケーションの新しい時間を使うつもりですが、私はデバイスの時刻を変更しません。

+0

あなたはおそらく、あなたが探している精度を得ることはありません。 WindowsではTimer Tickを使用してアプリケーションからイーサネットドライバにデータを移動し、イーサネットドライバからデータを戻すため、WindowsではTimer Tickイベントが処理される頻度が正確です。 – jdweng

+0

実際にデバイスのクロックを変更せずにNTPを使用できます。なぜNTPを使いたくないのですか?両方の端末を共通のNTPサーバに接続し、その情報を使って同期用の内部クロックオフセットを生成するのが最善のようです。いずれにせよ、質問されるように、質問は不明瞭で非常に広い。なぜ同期要件?どのような精度と精度が必要ですか?達成したいと思う正確な行動は何ですか?あなたが何かを試してみるのが良いでしょう。次に、良い[mcve]で質問を投稿するのに問題がある場合。 –

+0

私は、NTPを必要としないため、ユーザからの純正当な許可(各プラットフォーム、Android、ios、windowsの違い)がアプリに必要になります。私はこの問題に遅れ時間を知らずに正確な解決策がないことをインターネットで発見しました。だから、サーバーとクライアントの間の5つの通信を行い、平均時間を計算し、半分に分けます(私は同じ時間を持って帰ってくると信じています)。 2つのクライアントがサーバーに送信するレコードを更新し、サーバーが最近サーバーを選択する必要があるため、適合が必要です。 –

答えて

0

サーバーのタイムスタンプを返すために、クライアントからサーバーへの呼び出しが必要になります。クライアントが呼び出しを行う前に、クライアントに精度の高いタイムスタンプを記録させます。サーバーが時刻を返すとき、クライアントの送信時刻からサーバー応答の受信までのデルタを計算します。ラウンドトリップ時間の半分をサーバーのタイムスタンプから差し引くことができます。これにより、サーバー時間の近似値が得られます。より高い精度を得るために、より頻繁に繰り返し、デルタを平均化する。

関連する問題