C#でSNTPから現在日時を取得
chakemiです。今回はC#でSNTPサーバから現在日時を取得してみたいと思います。 SNTP(Simple Network Time Protocol)は、名前の通り簡易ネットワーク時刻プロトコルでNTPの仕様から複雑な部分を省略した形となっています。
SNTPプロトコルについては、こちらや、こちらを参考にしてください。ってか、自分も参考にさせて頂きました。
開発環境
- WindowsXP Pro SP3
- VisualStudio2008
では、さっそく。
UDPクライアントを生成します。
1 2 3 |
|
送信用パケットを生成し、送信します。 SNTPサーバは、送られてきた要求パケットの中身を書き換えて、送り返してきます。
1 2 3 4 5 6 7 8 9 10 11 |
|
タイムサーバにはWindowsXPのデフォルトで指定されたタイムサーバを利用させて頂きました。
SNTPから返ってきたパケットを受信します。
1
|
|
タイムサーバは1900年1月1日0時を基準に相対的な差を秒単位で、64ビット符号無し固定小数点で返してきます。 整数部の上位32ビットを取得して、経過秒数を取得します。
1 2 3 4 5 6 7 |
|
基準時間に経過秒数を加えて、さらに日本標準時間にあわせます。
1 2 3 4 |
|
以下、全文です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
|
ネットワークの遅延だとか考慮してません。。。 外部のサーバへアクセスする際は、ご注意ください。