最近需要用c++写个windows的程序, 程序里面要做个http server的程序,若是从头开发将非常麻烦, 仔细查看文档, 发现c++ builder的一些控件包装好了,直接使用,真的很便利。
关于bcb的安装大家到网络搜索吧, 我整理采用bcb6做开发, 操作系统采用windows7 64位系统。
一.打开bcb6的程序创建项目
1. 程序打开后默认创建了一个项目, 保存这个项目到一个单独的目录中, 做为项目的目录(bcb6项目管理部区分目录, 我们只能自己把每个项目单独存储到不同的项目目录中了),
在项目的默认form表单中放置一个memo控件
2. 在bcb的控件标签上 选择右侧的按钮, 一直点击到最后, 会出现indy servers控件的标签,在控件的标签中 再次点击右侧的按钮, 选择后面的控件, 最后选择 IdHTTPServer标签, 然后在form中单击控件
3. 运行这个空的项目, 检查项目是否有编译或者链接错误, 若是没有可以显示正常的界面
二.IdHTTPServer设置服务器控件
如下图, 在c++builder的项目的 form上面选中IdHTTPServer控件, 然后在熟悉视图中, 设置Acitve属性为true, 这样程序在运行后, 会让这个控件立即工作, 否则需要手动通过设置属性的方法,来工作。
然后设置默认端口为8000, 这样我们可以通过这个端口来访问我们的程序
三.设置IdHTTPServer空间的事件
如下图, 选中IdHTTPServer控件, 然后在属性视图中选择事件(Events)标签, 然后双击OnCommandGet事件, 进入相关事件响应函数中, 然后编写相关响应函数
四.编写事件响应函数
代码如下, 代码含义请参考注释,另外会提供源代码
void __fastcall TForm1::IdHTTPServer1CommandGet(TIdPeerThread *AThread,
TIdHTTPRequestInfo *RequestInfo, TIdHTTPResponseInfo *ResponseInfo)
{
// 获取http请求的命令名称, 例如是get请求, 或者post请求等
AnsiString cmd = RequestInfo->Command;
// 将获取的命令名称填写到备注栏中
this->Memo1->Lines->Add("cmd\t" + cmd);
// 获取参数列表里面的数据
TStrings* paras = RequestInfo->Params;
if(NULL != paras)
{
// 将参数的个数填写到memo中用来填写参数个数
this->Memo1->Lines->Add("count\t" + paras->Count);
// 循环遍历每个参数
for(int i = 0; i < paras->Count; i++){
// 将每个参数的名称和相关值, 添加到memo控件中
this->Memo1->Lines->Add("name\t" + paras->Names[i] + "\tvalue:" + paras->Values[paras->Names[i]] );
}
}
// 将未解析的数据获取到添加到memo中
this->Memo1->Lines->Add("UnparsedParams\t" + RequestInfo->UnparsedParams );
// 将请求的文档参数显示到页面中
this->Memo1->Lines->Add("Document\t" + RequestInfo->Document );
// 写一个响应值给请求, 这个值会显示在浏览器中
ResponseInfo->ContentText = "ok";
}
五.在浏览器里面访问这个服务器
1. 启动这个bcb项目, 然后在浏览器里面输入下面地址
http://localhost:8000/aa/?a=1
2. 观察浏览器响应
3. 观察应用程序的memo里面的内容
源代码:demo3