Windows7にて時刻修正を行うために
https://www.petitmonte.com/bbs/answers?question_id=8552
にてサービスアプリケーションとして動作する事で解決出来たのですが
問題が出ました。
Windows7 Delphi2007
サービスアプリケーションとはTCPソケット通信による
自分自身とのやりとりで送受信が可能でした。
サービスアプリケーション側でTCPServerを動作させます。
アプリケーション側はTCPClientを動作させます。
サーバー側のIPアドレスは「localhost」と指定しました。
クライアント側は「設定ファイル」にて自分のIPを指定しているので
自分のIPを伝えることが出来ます。
これで、LANが1ポートの場合、正常に機能するのですが
2ポート以上の場合だとサーバー側での「localhost」指定が効きません。
IPアドレスを直接指定すると正常に動作しますが全パターンの用意は困難なため
サービスアプリケーションとのメッセージ通信を考えましたが
今度はサービス一覧とか取得数時点でUNCが働き、エラーが帰ります。
サービスアプリケーションとうまく通信する手段はありますでしょうか?
あと参照先のやりかたでサービスアプリケーションを待機しているのですが
待機しているだけなのに 25%ものCPU負荷がかかります。
なにか良い方法があればよろしくお願いします。
すみません、CPU負荷の方はループ中のSleepで直りました。
参考にしたのは
エンデバカデロの
http://edn.embarcadero.com/print/images/40857/b3.pdf
こちらの資料です。
procedure TTimeAjust.ServiceExecute(Sender: TService);
begin
while (not Terminated) do begin
if (ProcessMessages) then begin
break;
end;
Sleep(200);
end
end;
Indyを使うことをお勧めします。
アドバイスありがとうございます。
Indyに置き換えるのが一番のでしょうけど
変更点が多いため
WinSock.gethostname
を使ってサーバー側とクライアント側で一致するIPアドレス値
にて通信ができるか試してみたいと思います。
WinSock.gethostnameで得られたIPアドレスでソケット通信をすると
正常に通信出来たので解決とします。
ツイート | ![]() |