附录六
部分源代码
1、浏览
完成浏览器必需的浏览功能。
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "CWin.h"
#include <Filectrl.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//设置浏览器起始页面
//空白页
TVariant *starturl=new TVariant(CppWebBrowser1->Path+"blank") ;
CppWebBrowser1->Navigate2(starturl) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CppWebBrowser1BeforeNavigate2(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL, TVariant *Flags,
TVariant *TargetFrameName, TVariant *PostData, TVariant *Headers,
TOLEBOOL *Cancel)
{
//修改地址栏为当前页面网址
AddrBar->Text = *URL ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StartBrowseClick(TObject *Sender)
{
//按钮 go ;浏览
//鼠标点击按钮,开始浏览地址栏中请求网页
//默认,回车键
TVariant *url=new TVariant(AddrBar->Text);
CppWebBrowser1->Navigate2(url) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::stopClick(TObject *Sender)
{
//按钮 stop ;停止
//鼠标点击按钮,停止当前浏览请求
CppWebBrowser1->Stop();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::refreshClick(TObject *Sender)
{
//按钮 refresh ;刷新
//鼠标点击按钮,刷新当前显示页面
CppWebBrowser1->Refresh();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::backClick(TObject *Sender)
{
//按钮 << ;后退
//鼠标点击按钮,访问历史链表中的后一网页
CppWebBrowser1->GoBack();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::forwardClick(TObject *Sender)
{
//按钮 >> ;前进
//鼠标点击按钮,访问历史链表中的前一网页
CppWebBrowser1->GoForward();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::homeClick(TObject *Sender)
{
//按钮 home ;主页
//鼠标点击按钮,显示IE默认主页
CppWebBrowser1->GoHome();
}
//---------------------------------------------------------------------------
2、Http请求消息类
Http请求消息的分析和构造。
下面的代码实现了类中基本功能——获取请求消息,并分析其url。
//---------------------------------------------------------------------------
AnsiString req ; //http-request;请求消息
AnsiString reqA ; //request address;请求文件对象url
int spos = 0 ; //临时变量
//从服务器端口获取请求消息的报文
req = Socket->ReceiveText() ;
免费分享源码的网址//从报文中分离出请求的url
reqA = req ;
spos = req.Pos(" ") ;
spos++ ;
reqA = req.SubString(spos,req.Length()-spos) ;
spos = reqA.Pos(" ") ;
spos-- ;
reqA = reqA.SubString(1,spos) ;
//---------------------------------------------------------------------------
3、Http响应消息类
Http响应消息的分析和构造。
下面的代码实现了类中基本功能——获取,构造完整的响应消息,并发送。
//---------------------------------------------------------------------------
AnsiString reqA ; //request address;请求文件对象url
AnsiString rep,reph,repb ;
//http-response ;响应消息包 = 头 + 体
//response head ;响应消息包头
//response body ;响应消息文件体
//从Web上获取响应消息
TNMHTTP *HTTP1 = new TNMHTTP(0);
HTTP1->Get(reqA) ;
reph = HTTP1->Header ;
repb = HTTP1->Body ;
free (HTTP1) ;
rep = reph + repb ;
//向浏览器发送响应消息
Socket->SendText(rep) ;
//---------------------------------------------------------------------------
4、缓存文件类
与硬盘缓存目录、文件相关的创建和读写操作。
下面的代码实现了类中基本功能——硬盘缓存目录、文件相关的创建和读写操作
//---------------------------------------------------------------------------
AnsiString hDir,bDir ; //缓存文件完整路径,h:信息头,b:文件
AnsiString hd,bd ; //缓存文件完整目录,
int iFileHandle; //文件句柄
int iFileLength; //文件长度
int iBytesRead; //文件读写字节数
char *Buffer; //缓存
AnsiString reph,repb ;
//response head ;响应消息包头
//response body ;响应消息文件体
//目录获取、创建操作
hd = ExtractFileDir(hDir) ;
bd = ExtractFileDir(bDir) ;
if (!(DirectoryExists(hd)||DirectoryExists(bd)))
{
ForceDirectories(hd) ;
ForceDirectories(bd) ;
}
//缓存文件操作
if ( FileExists(hDir) )
{ //将缓存中文件读出,准备传送给浏览器
//当缓存中有浏览器请求的对象时
iFileHandle = FileOpen(hDir, fmOpenRead);
iFileLength = FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
Buffer = new char[iFileLength+1];
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论