一个桌面应用程序如何与Windows服务在Vista/Windows2008/Windows7下通信?该应用程序需要向服务发送小字符串并接收字符串响应。两者都是使用Delphi 2009编写的。(请提供示例代码)
var
Client : TIdTCPClient;
...
Client.Host := 'localhost';
Client.Port := AnyFreePortNumber;
Client.Connect;
Client.IOHandler.Writeln (SomeString);
Response := Client.Readln;
...
Client.Disconnect;
针对服务器(在您的情况下是服务),
var
Server : TIdTCPServer;
Binding : TIdSocketHandle;
...
Server.DefaultPort := SameFreePortNumberAsInClient;
Binding := Server.Bindings.Add;
Binding.IP := '127.0.0.1';
Binding.Port := Server.DefaultPort;
Server.OnConnect := HandleConnection;
Server.OnDisconnect := HandleDisconnection;
Server.OnExecute := HandleCommunication;
Server.Active := True;
只需实现HandleCommunication方法即可。每当客户端决定发送某些内容时,该方法将被调用。例如:
procedure MyClass.HandleCommunication (AContext : TIdContext);
var
Request : String;
begin
Request := AContext.Connection.IOHandler.Readln;
if (Request = Command1) then
HandleCommand1
else if (Request = Command2) then
HandleCommand2
...
end;
这两种方法都允许您创建一个连接,对于大部分代码而言它是“透明”的,您只需调用一个接口即可将数据发送到远程并获取结果。然后,您可以像平常一样编程,忘记套接字等细节。
我没有尝试过,但我认为您可以使用命名管道。
我在我的服务应用程序中使用一个组件集,名为Simple IPC,它是一款带源代码的免费软件。
可以在torry.net上搜索到。当与桌面应用程序通信时,它在我所有的服务应用程序中都运行得非常好。
约翰