RealThinClient SDK是用于開發(fā)標準的HTTP(S)服務器,ISAPI擴展以及客戶端的VCL控件??捎糜赪indows下的CodeGear Delphi 6-2010。
VCL for writing stable HTTP(S) Servers, ISAPI extensions and Clients with CodeGear Delphi 6-2010 for Windows.
幫助您創(chuàng)建可靠和可擴展的跨平臺應用程序
RealThinClient SDK是一個靈活和模塊化框架,可以使用Delphi構建可靠和可擴展的跨平臺應用程序,通過利用具有完整*4和*6支持的HTTP/S和內置的多線程,為Web設計了壓力測試,以確保穩(wěn)定性。通過使用內置線程池的非阻塞事件驅動通信,使用RealThinClient SDK構建的應用程序可以在所有支持的平臺上通過在真正的多線程環(huán)境中使用有限數量的線程來處理數千個活動連接。
編寫可通過防火墻的客戶端、服務器和ISAPI擴展(Apache和MS IIS兼容)
編寫可靠的HTTP(S)服務器/路由器/代理服務器/反向代理服務器和負載平衡器
使用第三方加密組件作為RealThinClient SDK的插件(例如:StreamSec Tools 2.x = 99€)添加強大的SSL/TLS加密,或者在Windows上運行RTC客戶端的內置SSL支持,并將RTC服務器代碼轉換為ISAPI DLL以在具有SSL支持的第三方Web服務器上運行(例如MS IIS,Apache或Abyss)
使用RTC Web服務器(包含Delphi源碼)進行ISAPI擴展的調試
基于組件和模塊化設計,您可以在現(xiàn)有的Delphi應用程序中添加新的遠程處理功能,并重新使用現(xiàn)有的代碼
只需通過設置屬性(內置的線程池)就可以使你的客戶端、服務器采用多線程處理
只需通過設置屬性啟用自動壓縮和內置加密
通過使用RTC腳本引擎增強您的“靜態(tài)”HTML頁面,在本地Delphi代碼和可視化HTML演示文稿之間建立橋梁
一個服務器端代碼可以編譯成獨立服務器和ISAPI擴展
靈活且強大的RTC遠程功能,支持創(chuàng)建和維護鏈接對象,以及*可自定義的基于模板的遠程功能向導。
集成完整的JSON和XML-RPC支持:在Delphi中編寫函數,并通過XML-RPC和/或JSON格式(JSON + REST,JSON-RPC 1.0和2.0)使第三方可以遠程訪問它們。輕松調用第三方以XML-RPC和/或JSON格式發(fā)布的遠程功能。
具有完整源代碼的組件和演示項目,可以使用Delphi構建跨平臺應用程序。
RealThinClient SDK特征說明
多部署: 單一的代碼庫針對Windows、Mac OSX、iOS和Android
在Delphi中編寫一個項目,并將其編譯為(a)用于Windows、Mac OSX、iOS或Android的強大的獨立客戶端或服務器,或...(b)用于MS IIS或Apache的ISAPI DLL擴展或...(c )將你的應用程序整合到第三方的基于消息的服務器,比如NexusDB服務器。
RAD: 編寫事件,無用戶界面
使用RTC開發(fā)的一切都是基于組件的,因此你需要編寫的所有代碼都以事件的形式定義的,也就是說你只需要在相應的事件下編寫代碼即可,因此你可以不需要向導或編寫用戶界面就可以設計自己的服務器和客戶端應用程序。
輕松的多線程: 簡單的打開/關閉切換
所有的RTC連接組件都嵌入了一種非常成熟的多線程機制。你只需要簡單的設置MultiThreaded屬性為True就可以讓成千上萬的活動連接同時運行在獨立的線程中,這時任何新接收到的連接都會由一個線程池進行處理。這種機制可以節(jié)約寶貴的系統(tǒng)資源。
HTTP(S): 無需擔心防火墻
RTC客戶端可以不用進行任何配置就可以通過防火墻到達網絡。通過設置UseProxy屬性為True,數據客戶端就可以使用一個同樣設置的連接供應站與網絡進行數據傳輸,就像IE瀏覽Web一樣。這就意味著客戶可以在任何局域網內都可以訪問網絡。
非阻塞
不同于其他大部分的網絡組件,RTC連接組件是非阻塞型和事件驅動型的。這就意味著即使不使用多線程模式,客戶端與服務器端通信時都不會被阻塞(出現(xiàn)”應用程序沒有響應”的情況).在整個連接中,每一個狀態(tài)的改變都會觸發(fā)一個相應的事件。
遠程函數: 可重用,簡單編寫,簡單調用
就像使用本地函數一樣執(zhí)行和使用遠程函數。你只需要放置一個RtcFunction組件在你的Form或DataModule中,然后設置函數名稱和在OnExecute事件中編寫自己的代碼即可。OnExecute事件將接收連接對象、函數參數和一個結果對象,你只需要使將參數傳遞到事先寫好的函數中,剩下的就留給控件處理。
強大的加密功能&自動壓縮功能
RTC組件提供內置和易于使用的強加密以及使用遠程功能時的自動數據壓縮功能。啟用或禁用遠程功能的強加密或壓縮是*透明的。你只需在RtcClientModule和RtcServerModule中簡單的設置Encryption 和 Compression屬性,剩下的就留給控件處理。
插件框架: 編寫自己的插件或使用第三方插件
所有使用RTC SDK編寫的客戶端、服務器端的代碼都將以功能模塊和插件的形式與同樣使用RTC SDK編寫的應用程序整合。比如,你可以整合Web服務器、消息服務器、應用服務器、數據庫服務器、自己編寫的功能函數到一個數據服務器中,即使這些組件并沒有被特意設計成共享同一個服務空間。
基于簡單易用的插件框架,你可以將任意多個的功能性組件和數據性組件整合到一起。比如將RtcDataProvider, RtcServerModule 和RtcDataServerLink整合到一個數據服務連接組件中,使服務器的功能得以擴展。同時由于保持代碼在不同的單元(Data Modules),你甚至可以向其他同樣使用RTC SDK開發(fā)的人提供自己的插件(當然也可以出售插件)。
小體積
當使用D7壓縮后,一個完整的使用RTC SDK開發(fā)的Web服務器占用的空間不到600KB。雖然它如此小,但它的功能豐富,穩(wěn)定性高,可擴展性好。
RealThinClient SDK :服務器端組件
RtcHttpServer
實現(xiàn)TCP/IP上的HTTP協(xié)議,用于將RTC組件編譯到獨立的服務器應用程序中(繼承TRtcDataServer). 所有高層的服務器端的RTC組件都使用TRtcDataServer 子類與HTTP客戶端(RTC客戶端、Web瀏覽器、SOAP客戶端等)通信.方法是將你使用高層RTC組件編寫的代碼分開到不同的數據模塊中,然后使用單獨的一個DataModule將RtcHttpSever編譯到一個獨立的應用程序(EXE)中。
RtcISAPIServer
實現(xiàn)ISAPI接口,擴展ISAPI兼容的Web服務器(繼承TRtcDataServer)。
所有高層的服務器端的RTC組件都使用TRtcDataServer 子類與HTTP客戶端(RTC客戶端、Web瀏覽器、SOAP客戶端等)通信。方法是將你使用高層RTC組件編寫的代碼分開到不同的數據模塊中,然后使用單獨的一個DataModule將RtcISAPISever編譯到ISAPI擴展(DLL)中。
RtcMessageServer
實現(xiàn)可擴展的基于消息的服務器端的組件,可用于通過第三方的消息層訪問RTC應用程序。RTC SDK包含一個隨時可使用的NexusDB插件,該插件使用RtcMessageServer組件將RTC應用程序整合到NexusDB服務器。
RtcDataServerLink
在你有一些數據提供組件或服務模塊組件交叉的單元時是非常有用的,因為它可以群集相關的數據提供組件以及將它們鏈接到它們的數據服務器。如果你只有一個或少數幾個數據提供組件,你可以直接將鏈接它們到數據服務器連接組件,而無需RtcDataServerLink。
RtcDualDataServerLink
連接一組RTC組件到2個或更多的服務器連接組件(RtcHttpServer 和 RtcMessageServer)。這可以讓你只需編寫你的應用程序一次,然后可以通過標準的HTTP協(xié)議或通過安全的HTTPS協(xié)議(如果需要也可以通過不同的基于消息的傳輸比如NexusDB傳輸層)獲取。
RtcDataProvider
用于實現(xiàn)處理HTTP請求和響應的事件。每一個Data Provider只響應對應自己的請求而不會處理其他的請求。Data Providers以插件的形式在服務器上工作,這使得Data Providers可以單獨或則與其他RTC組件結合來開發(fā)多功能的服務器。
下面是一些可能用到的Data Providers列表:
File provider 用于傳送文件
PHP provider 用于處理php腳本和發(fā)送html頁面
SOAP provider 用于實現(xiàn)不同的Web服務器
Page providers 用于生成動態(tài)的 HTML 頁面
Image providers 用于為Web動態(tài)生成圖片
RtcServerModule
執(zhí)行一組遠程函數。它可以讓服務器為自己的遠程函數提供遠程訪問的能力。RtcServerModule沒有事件可執(zhí)行,你只需要在一邊將RtcServerModule和它的服務器連接起來,同時配合另一邊的RtcFunctionGroup就可以激活遠程函數。
RtcFunctionGroup
提供訪問函數的功能。當配合RtcServerModule使用時,它會自動為所有的RTC客戶端激活遠程訪問的功能。當配合RtcClientModule使用時,服務器可以以客戶端函數調用的返回結果的形式調用客戶端的函數。為了實現(xiàn)遠程函數,你至少需要一個RtcFunctionGroup組件以及連接一個或多個RtcFunction組件,F(xiàn)unction Groups也可以讓你調用同一組的其他函數。 RtcFunctionGroup首先是由RtcServerModule 和 RtcClientModule為了實現(xiàn)遠程函數而使用的,但是其他的組件也可以直接使用它。
RtcFunction
為你的RTC服務器添加新的遠程函數的步驟是:
將一個RtcFunction連接到一個RtcFunctionGroup,
務必讓Function Group指派一個RtcServerModule,
選擇一個"FunctionName",然后在OnExecute事件中編寫自己的代碼。
當編寫遠程函數時,你除了自己的代碼外無需再考慮其他的事情。一旦出現(xiàn)異常(你可以在OnExecute事件里拋出異常),客戶端會得到異常信息(Result.isType=rtc_Exception),所以你不需要擔心。
RtcScriptEngine
可以在HTML和XML文件里使用像Pascal一樣的腳本語言。
當使用RTC腳本引擎時,你就可以決定你的Delphi函數、編譯服務器或ISAPI擴展應該有多少應用程序代碼以及在你的HTML/XML文件中應該有多少腳本。這使得你可以將PHP和JSP這樣的語言和Delphi整合。
RealThinClient SDK : 客戶端組件
RtcHttpClient
它負責使用HTTP/HTTPS協(xié)議和你的服務器直接通信。
它發(fā)送由高層客戶端RTC組件比如RtcDataRequest 和 RtcClientModule發(fā)起的請求,然后接收響應并同樣使用高層組件處理這些響應。
RtcMessageClient
它是一個可以將你的高層客戶端組件(比如DataRequest 和 ClientModule)整合到第三方傳輸層的組件。比如,你可以在你的NexusDB服務器中使用NexusDB插件調用RTC遠程函數。
RtcDataClientLink
在你有大量的Data Request或Client Module交叉單元時它是非常有用的。因為它可以群集相關的客戶端請求組件以及與它們的數據客戶端連接相整合。如果你只有一兩個數據請求組件,你可以直接與數據客戶端連接組件整合,而不需要RtcDataClientLink。
RtcDualDataClientLink
用于創(chuàng)建小型的客戶端連接池,當提交一個請求時,組件可以根據當前可用連接中掛起的請求的數量決定使用哪個連接。一個新的請求將由掛起/活動請求最少的連接提交,除非你明確的指出了不同的連接對象。
RtcDataRequest
與RtcDataProvider相對應的客戶端組件。它可以讓客戶端向RTC服務器或其他的HTTP服務器提交請求。使用該組件,你可以向一個Web服務器請求一個文件,提交一個SOAP請求,執(zhí)行一個服務器端的PHP腳本等等。你可以使用該組件請求HTTP服務器提供的所有服務。
RtcClientModule
與RtcServerModule相對應的客戶端組件。它可以讓客戶端調用由服務器的一個服務模塊提供的函數。RtcClientModule沒有事件可以實現(xiàn),你只需要整合一個客戶端連接組件(RtcHttpClient)就可以調用遠程函數。如果你定義了客戶端函數然后整合到RtcClientModule中,那就可以執(zhí)行這些客戶端遠程函數。沒有特別需要實現(xiàn)的部分。服務器是以客戶端對服務器端調用的返回結果的形式調用客戶端遠程函數的。
RtcResult
處理遠程函數調用返回的結果。使用OnResult事件(OnResult事件接收連接(Sender:TRtcConnection),傳遞的參數(Param:TRtcValue)以及接收到的結果(Result:TRtcValue)),你可以輕松的編寫處理返回結果的代碼。
RealThinClient SDK 各版本的IDE和平臺支持情況:
IDE / 平臺 | | | | iOS 32-bit | iOS 64-bit | Android |
Delphi 7–XE | YES |
|
|
|
|
|
Delphi XE2 | YES | YES | YES | YES |
|
|
Delphi XE3 | YES | YES | YES |
|
|
|
Delphi XE4 | YES | YES | YES | YES |
|
|
Delphi XE5–XE7 | YES | YES | YES | YES |
| YES |
Delphi XE8–XE10.2 | YES | YES | YES | YES | YES | YES |
VCL for writing stable HTTP(S) Servers, ISAPI extensions and Clients with CodeGear Delphi 6-2010 for Windows.
- Write Firewall-friendly Clients, Servers and ISAPI Extensions (Apache 2.x and MS IIS 5.x compatible)
- One code compiles as Stand-alone Server and/or ISAPI Extension for MS IIS, Apache, etc.
- Debug ISAPI extensions using the RTC WebServer (full source code in Delphi included)
- Make your Client and/or Server Multi-Threaded,simply by setting a property (built-in thread-pooling)
- Enable Auto-Compression and strong Encryption
- Built-in Compression enabled by setting a property
- Built-in Encryption enabled by setting a property
- Advanced SSL using third-party components - Empower your "static" HTML pages and use the RTC Scripting Engine to create a bridge between your Delphi code and your visual HTML presentation
- Component-based and Modular Design allows you to add new Remote Client/Server functionality into your existing Delphi applications and re-use existing code
- Write and call flexible Remote Functions empowered by the compact RTC format or the standard XML-RPC format(simply pick your format by setting a property)
- Use the Remote Functions Wizard to easily write client-side classes for calling server-side functions.
- Delphi components with full source code ready for:
- Borland/CodeGear Delphi 6 - 2007 for Windows
- CodeGear Delphi / RAD Studio 2009 for Windows
- Lazarus for Windows
- Lazarus for Linux and MacOSX (beta)
RealThinClient SDK : Short Description of included Features |
Multi-Deployment: ISAPI Extensions, Stand-alone Servers, Third-party Servers | Write one server app and compile it as (a) robust Stand-alone Server, capable of serving unlimited number of clients, or as (b) ISAPI DLL extension which can be deployed to any ISAPI-capable Web Server (for example: MS IIS or Apache), or (c) integrate your application into third-party Message-based Servers like the NexusDB Server. |
RAD: Write events, not interfaces | Everything you do with RTC is component-based, while all the code you will ever need to write is defined as events, so you can design your server and client applications, without the need to use wizards or write interfaces. |
Easy MultiThreading: turn on/off with a simple switch | A very sophisticated Threading mechanism is built into all RTC Connection components, which allows thousands of active connections to be running in separate threads, all at the same time. And the only thing you need to do is change a simple MultiThreaded property to True. Then, any newly received connection will be handled by a thread pooling mechanism which saves valuable System resources, while still enabling nearly unlimited number of simultaneous connections at the same time. |
HTTP protocol: No Firewall problems | RTC Clients will never have to be specially configured to get through corporate firewall's and reach the internet. Simply by setting the UseProxy property to True, Data Client connection will use a connection provider which uses the same settings to read and send its data to the internet, as MS Internet Explorer does for browsing the Web. This means that Clients can work in any corporate LAN and have full access to the internet. |
Non-Blocking | Other than most other internet components, RTC connection components are non-blocking and event-driven. This means that, even when not using a multithreaded mode, your users will not be blocked ("Application Not Responding") during communication between your client and the server. For each state change in the connection, there is an event that will be triggered. |
Remote Functions: reusable, easy to write, easy to call | Implementing and using remote functions is as easy as writing local functions. You just place a RtcFunction component on your Form or a DataModule, set function name and write your OnExecute event. OnExecute event receives the Connection object, Function Parameters and a Result object. You just have to use the parameters passed to the function to prepare the result. The rest is done "under the hood" by RealThinClient components. |
Strong encryption & automatic compression | RTC components offer built-in, easy-to-use strong encryption with Encryption Keys of variable length and automatic data compression. You don't even have to think about encryption keys or data compression, everything will be generated and maintained for you. Using strong encryption and compression with remote functions is completely transparent, you will never have to worry about encryption or compression again. Simply set Encryption and Compression parameters in RtcClientModule and RtcServerModule, the rest is up to RTC. |
Plug-In Framework: write your own plug-ins or use 3rd-party plug-ins | All Client and Server code you write using RTC SDK is ready to be used as building blocks or plug-ins in any application that uses RTC SDK. For example, you can combine a Web Server, Messenger server, Application server, Database server and your own functions in one Data Server, even when those components weren't specially designed to share the same Server space. Because of the easy-to-use plug-in framework on top of which all RTC Components are built, you can link unlimited number of functionality and data providing components like RtcDataProvider, RtcServerModule and/or RtcDataServerLink to one Data Server connection component, enhancing that server's functionality with each new component. And by keeping code in separate units (Data Modules), you can even provide your own plug-ins (and sell those plug-ins) to anyone who uses the RTC SDK Library. |
Small footprint | A complete Web Server implementation, using RTC SDK, is less than 600 KBytes when compiled with D7. Even though it is so small, it offers enough functionality with great stability and scalability. |
Build rock-solid Internet-ready applications |
All RTC components are stress-tested for the highest stability. Check Test Results for more info.
By using non-blocking event-driven communication with a built-in thread-pooling mechanism, RealThinClient SDK can handle thousands of active connections by using a limited number of threads in a real multi-threaded environment (for example, 100 threads will be more than enough to handle several thousand active connections). Combined with reduced need for all important resources (CPU, Memory, Threads, Timers, Handles, etc), automatic handling of all communication-related objects, flexible remote functions (accept any structure for parameters and return any other structure as a result), automatic session handling (integrated time-out with variable life time) and a lot more, makes writing stable and performant Servers and Clients very easy with RealThinClient components. |
What is inside the RealThinClient SDK package? |
RealThinClient SDK : Server-side components |
RtcHttpServer: implements the HTTP protocol over TCP/IP and is used to compile RTC components into a stand-alone server application (extends TRtcDataServer). All high-level server-side RTC components use TRtcDataServer descendants to communicate with HTTP Clients (RTC Clients, Web Browsers, SOAP Clients, etc). Best practice is to write all your code using high-level server-side RTC components separated on different data modules, then use one extra DataModule where you will use one RtcHttpSever to compile the functionality into a stand-alone server application (EXE). |
RtcISAPIServer: implements the ISAPI interface and is used for for writing extensions for ISAPI-compatible web servers (extends TRtcDataServer). All high-level server-side RTC components use TRtcDataServer descendants to communicate with HTTP Clients (RTC Clients, Web Browsers, SOAP Clients, etc). Best practice is to write all your code using high-level server-side RTC components separated on different data modules, then use one extra DataModule where you will use one RtcISAPISever to compile the functionality into one ISAPI extension (DLL). |
RtcMessageServer: implements an extensible Message-based Server-side component, which can be used to access RTC applications through third-party communication layers. RTC SDK includes a ready-to-use NexusDB plugin, which uses the RtcMessageServer component to integrate RTC applications into a NexusDB Server. |
RtcDataServerLink: very useful when you have a number of Data Provider or Server Module components spread across units, because it groups related Data Provider components and links them to their Data Server connection. If you only have one or any small number of Data Provider components, you can link them directly to Data Server connection component, without the need of a RtcDataServerLink. |
RtcDualDataServerLink: Link a group of RTC components to 2 or more Server connection components (RtcHttpServer and RtcMessageServer). This allows you, for example, to write your application code once, but make it accessible through the standard HTTP protocol, through a secure HTTPS protocol and (if required) through different message-based transports like the NexusDB transport layer. |
RtcDataProvider: used to implement events which will handle HTTP requests and prepare responses (for example, client requests a file, which has to be read from a local drive and written out as a response). Each Data Provider only responds to his requests, ignoring the rest. This makes Data Providers work as plug-ins for the Server, which can be used alone or in combination with other RTC components to create a powerful and multifunctional Server.
Here is a short list of possible Data Providers:- File provider to send files
- PHP provider to process php scripts and send HTML pages out
- SOAP provider to implement different Web Services
- Page providers to generate dynamic HTML pages
- Image providers to dynamically generate images for the Web
- anything else, there is no limit
|
RtcServerModule: execution point for a group of Remote Functions. It enables the Server to provide remote access to its remote functions. RtcServerModule has no events which would have to be implemented, you just link a RtcServerModule with its Server on one side and a RtcFunctionGroup on the other side to enable remote functions. |
RtcFunctionGroup: provides access to a group of functions. When used by a RtcServerModule, it automatically enables access to remote functions for all RTC Clients. When used by a RtcClientModule, it gives server the ability to call client-side functions as a result of client's function calls.
To implement remote functions, you will need at least one RtcFunctionGroup component and link one or more RtcFunction components to it. Function Groups also enable you to call other functions from the same group to fill parameters for other function calls. RtcFunctionGroup is primarily used by the RtcServerModule and RtcClientModule components to hold implementations for their remote functions, but it can also be used directly by any other component. |
RtcFunction: link one RtcFunction to a RtcFunctionGroup, check that the Function Group is assigned to a RtcServerModule, then choose a "FunctionName" and write your function code in the OnExecute event. That's all you have to do to add a new remote function to your RTC Server.
When writing a remote function, you don't have to think about anything but your function code. In case of an exception (which you can also raise inside your OnExecute event handler), client will get the exception message as a result (Result.isType=rtc_Exception), so you don't even have to worry about that. |
RtcScriptEngine: makes it possible to use a Pascal-like scripting language from within HTML and/or XML files. When using the RTC Scripting Engine, you can decide for yourself how much of your application code you want to have in form of Delphi functions, compiled inside your Server or ISAPI extension, and how much you want to have in form of scripts inside your HTML/XML files. This allows you to combine the power of Delphi with the flexibility of scripting languages like PHP and JSP. |
RealThinClient SDK : Client-side components |
RtcHttpClient: this is the component that will be responsible for direct communication with your servers when using the HTTP or HTTPS protocol. It sends requests prepared by higher-level client-side RTC components like RtcDataRequest and RtcClientModule, then accepts responses and uses the same higher-level components to process those responses. |
RtcMessageClient: this is the component which you can use to integrate your higher-level Client-side components (like DataRequest and ClientModule) into third-party transport layers. For example, by using the included NexusDB plugin, you can call RTC remote functions integrated in your NexusDB Server. |
RtcDataClientLink: very useful when you have a number of Data Request or Client Module components spread across units, because it groups related client request components and links them to their Data Client connection. If you only have one or two data request components, you can link them directly to Data Client connection component, without the need of a RtcDataClientLink. |
RtcDualDataClientLink: use to create a small pool of client connections, allowing the component to decide which connection to use when posting a request, depending on the number of currently pending requests on available connections. A new request will be posted through the connection with the lowest number of pending/active requests, unless you explicitly specify a different connection object. |
RtcDataRequest: client-side counterpart to RtcDataProvider. It enables the client to post requests to a RTC Server or any other HTTP Server. Using this component, you can request files from a Web Server, post a SOAP request to a Web Service, execute a server-side PHP script, etc. Everything any HTTP Server is providing, you can request it using this component. |
RtcClientModule: client-side counterpart to RtcServerModule. It enables the client to call functions provided by the Server through one of its Server Modules. RtcClientModule has no events which would have to be implemented, you just link a RtcClientModule to a Client connection component (RtcHttpClient) and you can call remote functions.
If you define client-side functions and link them to this RtcClientModule, this will be the execution point of those client-side remote functions. No special implementation needed. Client-side remote functions are functions which server can call on the client-side as a result of client's calls to a server-side function. |
RtcResult: process results received from remote function call(s). Using the "OnResult" event, which receives the connection (Sender:TRtcConnection), parameters sent (Param:TRtcValue) and the result received (Result:TRtcValue), you can easily write the code to process the result. Maybe only do a simple check if function executed successfully, or show a message dialog, or create a separate form containing all data received, or fill received content into other component on the same form or datamodule (for example, fill ClientDataSet with records from a database). |