使用delphi 開發多層應用(六)kbmMW返回流到客戶端


   在第一個簡單的例子,服務器返回給客戶端的是一個簡單的變量,但是在日常的應用中,往往需要給客戶端傳輸大量的數據,例如要

返回流,在kbmMW 里面返回流也是比較方便的,下面我們就以給客戶端返回一個照片為例,說明一下。

  還是在上次的例子服務里面,我們添加一下這個功能,首先要定義服務函數處理:

 

  function Performgetimg(ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant; virtual;

 然后把函數名與處理過程在服務里面對應起來:

function Txalionsrv.ProcessRequest(const Func: string;
const ClientIdent: TkbmMWClientIdentity;
const Args: array of Variant): Variant;

var
AFunc:string;
begin
AFunc:=UpperCase(Func);
if AFunc='SUMALL' then
Result:=Performsumall(ClientIdent,Args)
else if AFunc='GETIMG' then
Result:=Performgetimg(ClientIdent,Args)
end;

最后就是函數處理的具體實現:

function Txalionsrv.Performgetimg(ClientIdent: TkbmMWClientIdentity;
const Args: array of Variant): Variant;
var
fs:Tfilestream;
begin
try
if not FileExists('D:\picture\'+args[1]) then
begin
kbmMWRaiseServerException('文件不存在!');
exit;
end;

fs:=Tfilestream.Create('D:\picture\'+args[1]);

ResultStream.LoadFromStream(fs);
finally
fs.Free;
end;

end;

好了,服務器端就完成了,可以編譯運行了。

 

現在來處理客戶端,在客戶端form 上放一個button 和image 控件,如圖:

並輸入按鈕點擊事件:

procedure TForm2.Button2Click(Sender: TObject);
var
args:array[1..4] of Variant;
ms:TMemoryStream;
begin
args[1]:='1.JPG';
kbmMWSimpleClient1.Request('xalion_srv','','getimg',args);

kbmMWSimpleClient1.ResultStream.SaveToFile('c:\1.jpg');

Image1.Picture.LoadFromFile('c:\1.jpg');

end;

 

ok 同時運行服務器和客戶端程序,我們就可以從服務器上下載照片流,並在客戶端顯示了。


存補:2013.12.09

如果不想在客戶端機器上使用臨時文件,可以直接用流,但是需要知道圖片格式

 

procedure TForm1.Button1Click(Sender: TObject);
 begin
  var
   args:array[1..4] of Variant;
   NewG: TJPEGImage;


begin
   args[1]:='1.JPG';
   kbmMWSimpleClient1.Request('xalion_srv','','getimg',args);
 
   newg:=TJPEGImage.Create;
  newg.LoadFromStream(kbmMWSimpleClient1.ResultStream);
  image1.Picture.Graphic.Free;
  image1.Picture.Graphic:=newg;
 
end;

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM