LAN接続の他端末のシステム日付を更新

[戻る]
ある 2006/03/09(木) 10:51:31
はじめまして あるです。

TCP/IPで接続されている社内LANの環境で、自端末から他端末の
システム日付を変更したいんですが、

::SetLocalTimeで他端末のシステム日付を変える事はできますでしょうか?

または、他端末の方から自端末のシステム日付を取得し、他端末のシステム日付を
::SetLocalTimeで更新するという手もあると思うのですが、

どちらにせよ 自分の端末以外の端末のシステム日付を読み書きするのが
可能で無いと実現できないのかな、と思ってます。

良い方法をお知りの方がいらっしゃいましたら ぜひご教授お願いいたします。

以上 よろしくお願いします。

tetrapod 2006/03/09(木) 11:00:45
えっと OS は Windows 系ということでよいのですか?
NET TIME コマンドをログインスクリプトで実行させるようにするだけでは?

あるいはもっとよい方法で (s)ntp を使うだけとか。

たまたま通りすがったもの 2006/03/09(木) 11:34:12
時刻の取得ならば SDK に NetRemoteTOD っていうのがありますがどうでしょう?

ある 2006/03/09(木) 14:25:40
お返事ありがとうございます

OSはWindows2000/XPです

このマシンはサーバなので常時動いているため、ログインのタイミングでは取得できません。
ですので、毎日決まった時間に取得するようにしたいのです。

NetRemoteTOD という関数も調べてみましたが、
第一引数のサーバ名が どういう形式のものをセットすれば良いのかわからず、
今試行錯誤しています。
どうもUNICODEで指定するみたいなんですが。。
サーバ名が記述されているサンプルみたいなものがあれば教えてもらえませんでしょうか?

ぜひともよろしくお願いいたします。

tetrapod 2006/03/09(木) 15:02:18
ならば ntp を使えばいいでしょう。自動的に時間が修正され、何も触る必要は無いです。

ってもしかして
・マシンの内蔵時計の誤差が大きいのを自動修正したい
って要望ではなくて
http://www2.moug.net/bbs/program/20060308000003.htm
のような要望?

NetRemoteTOD のサンプルは見ましたか?簡単でしょ?
NetRemoteTOD(L"\\\\timeservername", (LPBYTE*)&pBuf); するだけですよ。
第一引数はサーバ名に \\ をつけたもの、いつも使っている
net use k: \\myserv\share 等と同じです。
C/C++ ソースコード内に \ を書きたいときは \\ とするので上記例は \\\\ で正しい。

ある 2006/03/09(木) 16:05:33
tetrapodさん お返事ありがとうございます。
ntpってのがどんなものかよくわかってないので使用できませんでした。。

NetRemoteTOD の方 詳しく書いていただきましてありがとうございます。
おかげさまで時間の取得はできました。

第一引数の Lがなかったりとか¥が4つとかその辺がおかしくて取れませんでした。

取得はできたのですが、その値を自端末のシステム日付に設定する時に

TIME_OF_DAY_INFO 型からSYSTEMTIME型にキャストができなかったので

構造体の内容を各自セットしてSetLocalTimeを実行したところ、
どうもタイムゾーンとかいうのが反映されていないようで
時間がおかしくなってしまいます。

         SYSTEMTIME sSysWork;

         sSysWork.wYear        = pBuf->tod_year;
         sSysWork.wMonth        = pBuf->tod_month;
         sSysWork.wDay        = pBuf->tod_day;
         sSysWork.wHour        = pBuf->tod_hours;
         sSysWork.wMinute        = pBuf->tod_mins;
         sSysWork.wSecond        = pBuf->tod_secs;
         sSysWork.wMilliseconds    = pBuf->tod_tinterval;
         sSysWork.wDayOfWeek    = pBuf->tod_weekday;

このタイムゾーンをどうすれば 取得した日時をそのままローカルの端末に
反映することができるのでしょうか?

聞いてばかりですみませんが よろしくお願いします。

tetrapod 2006/03/09(木) 17:41:19
うーん。もし時計が狂うのを防止するだけなら解決の方向がずれてると思う。
net time /domain とか /rtsdomain とか /setsntp とかでいける。
プログラム組む必要は無い。
信頼できるタイムサーバを作るってのはまた話が別だけど。

んで、そこまで出来てるのならもうちょっと調べて欲しかったような気がする。
tod_timezone ってのがメンバにあるんだけど、それでいけると思う。
どの TZ をいつ誰に適用するかは要考察かもしれないけどね。

アメリカにあるファイルサーバを
イギリスにあるタイムサーバに同期させるためのプログラムを
日本にあるクライアントマシンで実行させる

とき、どこの TZ をいつ誰に適用させるか?は慎重に考えないとね。

古いスレッドには追加発言できません。