使用delphi 开发多层应用(六)kbmMW返回流到客户端

简介: 在第一个简单的例子,服务器返回给客户端的是一个简单的变量,但是在日常的应用中,往往需要给客户端传输大量的数据,例如要 返回流,在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;

 





目录
相关文章
|
人工智能 IDE 程序员
GitHub Copilot 免费了!程序员们的福音来了!
《GitHub Copilot 免费了!程序员们的福音来了!》 近日,GitHub 宣布其 AI 编程助手 GitHub Copilot 现在可以免费使用。曾经每月需支付 10 美元订阅费的 Copilot,现在向所有人开放免费版本,这对个人开发者、初学者和小型团队来说是个大好消息。免费版支持 GPT 和 Claude 模型,并提供每月 2000 次代码补全和 50 条聊天消息等核心功能。用户只需注册或登录 GitHub 账户,在 VS Code 中安装扩展并激活免费版即可使用。此外,Visual Studio Code 也完全免费,进一步降低了开发门槛。 除了
12482 7
GitHub Copilot 免费了!程序员们的福音来了!
|
Java 大数据 数据库
【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!
【Spring底层原理高级进阶】Spring Batch清洗和转换数据,一键处理繁杂数据!Spring Batch是如何实现IO流优化的?本文详解!
|
应用服务中间件 nginx Docker
【Docker系列】从头学起 Docker——docker start 命令详解
【Docker系列】从头学起 Docker——docker start 命令详解
【Docker系列】从头学起 Docker——docker start 命令详解
|
数据采集 XML JSON
爬虫系列:使用 API
爬虫系列:使用 API
657 0
爬虫系列:使用 API
|
.NET C# 开发框架
C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
原文 http://www.cnblogs.com/codealone/archive/2013/09/22/3332607.html 应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config)。
1021 0
|
6天前
|
存储 JavaScript 前端开发
JavaScript基础
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)
|
5天前
|
云安全 人工智能 安全
阿里云2026云上安全健康体检正式开启
新年启程,来为云上环境做一次“深度体检”
1612 6
|
2天前
|
消息中间件 人工智能 Kubernetes
阿里云云原生应用平台岗位急招,加入我们,打造 AI 最强基础设施
云原生应用平台作为中国最大云计算公司的基石,现全面转向 AI,打造 AI 时代最强基础设施。寻找热爱技术、具备工程极致追求的架构师、极客与算法专家,共同重构计算、定义未来。杭州、北京、深圳、上海热招中,让我们一起在云端,重构 AI 的未来。