HTTP 服务控件TWebServer(使用Indy 的TIdHTTPServer 实现)

在开发移动端App的时候,需要使用 WebBrowser 作为平台来展示H5界面,这个时候就需要在App内部实现一个 HttpServer 服务。对于 Delphi 来说,使用 Indy 的 TIdHTTPServer 实在是最好不过了。为了方便使用,我们将 TIdHTTPServer 根据我们的需要进行了封装,这样使用起来会比较方便。本文将详细介绍封装好的控件 TWebServer(有不同需求的可以根据源代码自行修改)。

控件源代码下载

(没有CSDN 分数的,联系QQ:910731685 发给你)

一、控件属性:

序号 属性 类型 说明
1 DefaultPort Word Http服务的端口号,默认:8080
2 RootDir string 本地H5文件的根目录。windows下默认在执行文件所在目录中的WWW子目录,android 默认在 TPath.GetDocumentsPath 木下的 WWW 子目录
3 MaxConnections integer 允许客户端的最大连接数。默认:0 表示不限制。
4 Active Boolean 是否启动 Http 服务,默认: False

二、控件方法:

序号 方法 类型 说明
1 StartServer function 启动Http服务函数 :function StartServer(var errmsg : string) : Boolean。成功: True,启动失败则返回False,同时 errmsg 表示错误信息。
2 StopServer procedure 停止Http服务

三、控件事件:

序号 事件 类型 说明
1 OnPost 事件 前端向服务器发送 Post 请求时触发这个事件,本控件只支持字符串参数(流参数未支持)。RequestStr: string; var ResponseStr : string。其中 RequestStr 表示请求参数,ResponseStr 表示返回给前端的字符串参数。
2 OnGetParams 事件

当前端通过 Get 请求服务,如果没有找到对应的文件,同时也存在请求连接参数或者 form-data 参数,就会触发这个事件。

参数:

URL:请求路径
RequestParamsStr:请求的字符串参数
ResponseStr:返回给前端的字符串

举例如下:
加入前端请求:http://127.0.0.01:8080/Data?Name=sensor&Add=Shenzhen

则事件中的参数如下:
URL:/Data
RequestParamsStr:{"Name":"sensor","Add":"Shenzhen"}  //按照JSON的字符串格式返回
 

四、控件使用:

var
   WebServer : TWebServer;

   WebServer := TWebServer.Create(nil);
   WebServer.DefaultPort := 8080;  //默认就是8080,可以写
   WebServer.OnPost := myOnPost;
   WebServer.OnGetParams := myOnGetParams;
   if not WebServer.StartServer(errmsg) then
      showmessage(errmsg);    //服务器打开失败

五、注意事项:

        1. 把 H5 的文件放置到 RootDir 属性所指的根目录。对于 windows 可以直接拷贝,对于移动端,可以通过 Delphi 的 Deployment 菜单增加,可以包含子目录。

HTTP 服务控件TWebServer(使用Indy 的TIdHTTPServer 实现)_第1张图片

         2. 对于 H5 静态文件系统已经默认处理了,移动App正常情况下也不会 Get 不存在的文件,而且还带参数,所以 OnGetParams 事件根本无需处理。

        3. 在移动 App 成功打开服务后,找到IP地址,在 PC上也是可以访问的。

        4. 如果在 PC上测试,需要注意防火墙限制。

控件已经在 PC 和 android 上测试通过。

你可能感兴趣的:(Delphi,wpf,c#,.net)