Windows7でサービスアプリケーションとの通信

解決


take  2015-11-24 18:11:35  No: 47769

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負荷がかかります。

なにか良い方法があればよろしくお願いします。


take  2015-11-24 18:22:33  No: 47770

すみません、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;


通りすがり  2015-11-24 21:52:07  No: 47771

Indyを使うことをお勧めします。


take  2015-11-26 22:38:07  No: 47772

アドバイスありがとうございます。
Indyに置き換えるのが一番のでしょうけど
変更点が多いため

 WinSock.gethostname
 
を使ってサーバー側とクライアント側で一致するIPアドレス値
にて通信ができるか試してみたいと思います。


take  2015-11-30 17:41:06  No: 47773

WinSock.gethostnameで得られたIPアドレスでソケット通信をすると
正常に通信出来たので解決とします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加