D
dawndang
Unregistered / Unconfirmed
GUEST, unregistred user!
使用IdHTTPServer 相应客户端页面请求的时候 针对 IdHTTPServer1CommandGet 事件编程,
从服务器端读取数据流经过简单的解密处理发回给客户端
问题就出在解密处理的时候,解密使用的一个类,
由于indy控件实现了多线程的访问,导致 在解密过程中 第一个文件还没有解密完成 第二个下载文件的请求同时到,同时又调用了解密类 这样造成了 数据混乱,
我尝试过吧解密类放到一个线程中去单独处理,但是在创建线程的时候被告知无效的线程id
下面这段代码就是使用线程解密的事件响应代码 拜请过目
procedure TForm3.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
ss : Tmemorystream;
rUrl:string;
m:TMake;
send:TSendContent;
begin
m := Tmake.Create('1.store');
rUrl := ARequestInfo.Document;
ss := TmemoryStream.Create;
if rUrl='/' then
m.GetFileByName(m.Fdata.HomePage,ss,FILE_ENCRYPT_KEY)
else
begin
send := TSendContent.Create('1.store',MidStr(rUrl,2,Length(rUrl)),ss);//这里创建线程失败
end;
AResponseInfo.ContentStream := ss;
AResponseInfo.WriteContent;
m.Free;
从服务器端读取数据流经过简单的解密处理发回给客户端
问题就出在解密处理的时候,解密使用的一个类,
由于indy控件实现了多线程的访问,导致 在解密过程中 第一个文件还没有解密完成 第二个下载文件的请求同时到,同时又调用了解密类 这样造成了 数据混乱,
我尝试过吧解密类放到一个线程中去单独处理,但是在创建线程的时候被告知无效的线程id
下面这段代码就是使用线程解密的事件响应代码 拜请过目
procedure TForm3.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
ss : Tmemorystream;
rUrl:string;
m:TMake;
send:TSendContent;
begin
m := Tmake.Create('1.store');
rUrl := ARequestInfo.Document;
ss := TmemoryStream.Create;
if rUrl='/' then
m.GetFileByName(m.Fdata.HomePage,ss,FILE_ENCRYPT_KEY)
else
begin
send := TSendContent.Create('1.store',MidStr(rUrl,2,Length(rUrl)),ss);//这里创建线程失败
end;
AResponseInfo.ContentStream := ss;
AResponseInfo.WriteContent;
m.Free;