服务端代码:

  1. unit RtcHttpServer;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ImgList, StdCtrls, ComCtrls, rtcInfo, rtcConn, rtcDataSrv, rtcHttpSrv,
  8. rtcFunction, rtcSrvModule;
  9.  
  10. type
  11. TMsgType = (mtOK, mtHelp, mtErr);
  12.  
  13. TrtcHttpServerDemo = class(TForm)
  14. RtcHttpServer1: TRtcHttpServer;
  15. ListView1: TListView;
  16. Button1: TButton;
  17. Button2: TButton;
  18. ImageList1: TImageList;
  19. RtcFunctionGroup1: TRtcFunctionGroup;
  20. RtcFunction1: TRtcFunction;
  21. RtcServerModule1: TRtcServerModule;
  22. procedure Button1Click(Sender: TObject);
  23. procedure RtcHttpServer1Connect(Sender: TRtcConnection);
  24. procedure RtcHttpServer1Connecting(Sender: TRtcConnection);
  25. procedure RtcHttpServer1Disconnect(Sender: TRtcConnection);
  26. procedure RtcHttpServer1ListenStart(Sender: TRtcConnection);
  27. procedure RtcHttpServer1SessionClose(Sender: TRtcConnection);
  28. procedure RtcHttpServer1SessionOpen(Sender: TRtcConnection);
  29. procedure RtcHttpServer1ListenLost(Sender: TRtcConnection);
  30. procedure RtcFunction1Execute(Sender: TRtcConnection;
  31. Param: TRtcFunctionInfo; Result: TRtcValue);
  32. private
  33. procedure LogEvent(msg: String; msgType: TMsgType);
  34. procedure LogClear;
  35. public
  36. { Public declarations }
  37. end;
  38.  
  39. var
  40. rtcHttpServerDemo: TrtcHttpServerDemo;
  41.  
  42. implementation
  43.  
  44. {$R *.dfm}
  45.  
  46. procedure TrtcHttpServerDemo.Button1Click(Sender: TObject);
  47. begin
  48. //开始监听
  49. RtcHttpServer1.Listen();
  50. end;
  51.  
  52. procedure TrtcHttpServerDemo.LogClear;
  53. begin
  54. //清除事件列表
  55. ListView1.Items.Clear;
  56. end;
  57.  
  58. procedure TrtcHttpServerDemo.LogEvent(msg: String; msgType:TMsgType);
  59. var
  60. ltIco: TListItem;
  61. begin
  62. ltIco := ListView1.Items.Add;
  63. ltIco.SubItems.Add(msg);
  64. ltIco.SubItems.Add(DateTimeToStr(Now));
  65. //设置图标
  66. case msgType of
  67. mtOK: ltIco.StateIndex := ;
  68. mtHelp: ltIco.StateIndex := ;
  69. mtErr: ltIco.StateIndex := ;
  70. end;
  71.  
  72. ListView1.Scroll(, );
  73. end;
  74.  
  75. procedure TrtcHttpServerDemo.RtcFunction1Execute(Sender: TRtcConnection;
  76. Param: TRtcFunctionInfo; Result: TRtcValue);
  77. begin
  78. with Sender as TRtcDataServer do
  79. begin
  80. //请求名字
  81. LogEvent('请求参数:' + Param.asString['name'], mtOK);
  82. Result.asString := 'Hello: ' + Param.asString['name'];
  83. end;
  84. end;
  85.  
  86. procedure TrtcHttpServerDemo.RtcHttpServer1Connect(Sender: TRtcConnection);
  87. //连接事件
  88. begin
  89. LogEvent('连接成功:客户端地址:' + Sender.PeerAddr + ',当前客户端连接数'
  90. + IntToStr(Sender.TotalConnectionCount), mtOK);
  91.  
  92. end;
  93.  
  94. procedure TrtcHttpServerDemo.RtcHttpServer1Connecting(Sender: TRtcConnection);
  95. begin
  96. LogEvent(Sender.sPeerAddr + '正在连接中...', mtOk);
  97. end;
  98.  
  99. procedure TrtcHttpServerDemo.RtcHttpServer1Disconnect(Sender: TRtcConnection);
  100. begin
  101. LogEvent(Sender.sPeerAddr + '连接断开了... 当前客户端连接数'
  102. + IntToStr(Sender.TotalConnectionCount - ), mtOk);
  103. end;
  104.  
  105. procedure TrtcHttpServerDemo.RtcHttpServer1ListenLost(Sender: TRtcConnection);
  106. begin
  107. LogEvent('监听丢失:' + Sender.PeerAddr, mtErr);
  108. end;
  109.  
  110. procedure TrtcHttpServerDemo.RtcHttpServer1ListenStart(Sender: TRtcConnection);
  111. begin
  112. LogClear;
  113. LogEvent('服务启动中',Mtok);
  114. end;
  115.  
  116. procedure TrtcHttpServerDemo.RtcHttpServer1SessionClose(Sender: TRtcConnection);
  117. begin
  118. LogEvent('会话已关闭',MtErr);
  119. end;
  120.  
  121. procedure TrtcHttpServerDemo.RtcHttpServer1SessionOpen(Sender: TRtcConnection);
  122. begin
  123. LogEvent('会话已成功连接',MtErr);
  124. end;
  125.  
  126. end.

客户端代码:

  1. unit RtcClient;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, rtcConn, rtcDataCli, rtcHttpCli, rtcInfo, rtcFunction, StdCtrls,
  8. ExtCtrls, ComCtrls, ImgList, rtcCliModule;
  9.  
  10. type
  11.  
  12. TMsgType = (mtOK, mtHelp, mtErr);
  13.  
  14. TfrmRtcHttpClient = class(TForm)
  15. RtcFunction1: TRtcFunction;
  16. RtcHttpClient1: TRtcHttpClient;
  17. ListView1: TListView;
  18. Panel1: TPanel;
  19. Button1: TButton;
  20. ImageList1: TImageList;
  21. RtcClientModule1: TRtcClientModule;
  22. RtcFunctionGroup1: TRtcFunctionGroup;
  23. Button2: TButton;
  24. RtcResult1: TRtcResult;
  25. edit1: TEdit;
  26. procedure Button1Click(Sender: TObject);
  27. procedure RtcHttpClient1ConnectError(Sender: TRtcConnection; E: Exception);
  28. procedure RtcHttpClient1ConnectFail(Sender: TRtcConnection);
  29. procedure RtcFunction1Execute(Sender: TRtcConnection;
  30. Param: TRtcFunctionInfo; Result: TRtcValue);
  31. procedure edit1KeyPress(Sender: TObject; var Key: Char);
  32. procedure RtcResult1Return(Sender: TRtcConnection; Data, Result: TRtcValue);
  33. procedure RtcHttpClient1Connect(Sender: TRtcConnection);
  34. private
  35. procedure LogEvent(msg: String; msgType: TMsgType);
  36. procedure LogClear;
  37. public
  38. { Public declarations }
  39. end;
  40.  
  41. var
  42. frmRtcHttpClient: TfrmRtcHttpClient;
  43.  
  44. implementation
  45.  
  46. {$R *.dfm}
  47.  
  48. procedure TfrmRtcHttpClient.Button1Click(Sender: TObject);
  49. begin
  50. if RtcHttpClient1.isConnected
  51. or RtcHttpClient1.isConnecting then
  52. exit;
  53. RtcHttpClient1.Connect();
  54. end;
  55.  
  56. procedure TfrmRtcHttpClient.edit1KeyPress(Sender: TObject; var Key: Char);
  57. begin
  58. //发送请求
  59. if key = # then begin
  60. with RtcClientModule1, Data do
  61. begin
  62. with NewFunction('SimpleTest') do begin
  63. asString['name'] := edit1.Text;
  64. Call(RtcResult1);
  65. end;
  66. end;
  67. end;
  68.  
  69. end;
  70.  
  71. procedure TfrmRtcHttpClient.LogClear;
  72. begin
  73. ListView1.Items.Clear;
  74. end;
  75.  
  76. procedure TfrmRtcHttpClient.LogEvent(msg: String; msgType: TMsgType);
  77. var
  78. ltIco, ltEvent, ltDate: TListItem;
  79. begin
  80. ltIco := ListView1.Items.Add;
  81. ltIco.SubItems.Add(msg);
  82. ltIco.SubItems.Add(DateTimeToStr(Now));
  83. //设置图标
  84. case msgType of
  85. mtOK: ltIco.StateIndex := ;
  86. mtHelp: ltIco.StateIndex := ;
  87. mtErr: ltIco.StateIndex := ;
  88. end;
  89.  
  90. ListView1.Scroll(, );
  91. end;
  92.  
  93. procedure TfrmRtcHttpClient.RtcFunction1Execute(Sender: TRtcConnection;
  94. Param: TRtcFunctionInfo; Result: TRtcValue);
  95. begin
  96. Param.asString['name'] := 'pengshaomin';
  97. LogEvent('服务器响应:' + Result.asString, mtOK);
  98. end;
  99.  
  100. procedure TfrmRtcHttpClient.RtcHttpClient1Connect(Sender: TRtcConnection);
  101. begin
  102. LogEvent('连接服务器[' + Sender.sServerAddr +']成功', mtOK);
  103. end;
  104.  
  105. procedure TfrmRtcHttpClient.RtcHttpClient1ConnectError(Sender: TRtcConnection;
  106. E: Exception);
  107. begin
  108. LogEvent('连接服务器[' + Sender.sServerAddr +']错误', mtErr);
  109. end;
  110.  
  111. procedure TfrmRtcHttpClient.RtcHttpClient1ConnectFail(Sender: TRtcConnection);
  112. begin
  113. LogEvent('连接服务器[' + Sender.sServerAddr +']失败', mtErr);
  114. end;
  115.  
  116. procedure TfrmRtcHttpClient.RtcResult1Return(Sender: TRtcConnection; Data,
  117. Result: TRtcValue);
  118. begin
  119.  
  120. with Sender as TRtcDataClient do
  121. begin
  122. LogEvent( (Sender as TRtcDataClient).sServerAddr + '服务器:' + Result.asString, mtOK);
  123. end;
  124. end;
  125.  
  126. end.

http://www.cnblogs.com/pengshaomin/archive/2012/10/10/2718579.html

RealThinClient学习(一)的更多相关文章

  1. RealThinClient SDK 学习笔记(1)

    从客户端调用远程函数的两种方法 1: RtcClientModule1.Prepare('select'); // call the "select" function on th ...

  2. 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代

    2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...

  3. Angular2学习笔记(1)

    Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...

  4. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  5. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  6. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  7. Unity3d学习 制作地形

    这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...

  8. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  9. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

随机推荐

  1. webwervice发布时出错 java.security.PrivilegedActionException

    错误信息: 信息: Dynamically creating response wrapper bean Class com.potevio.ws.jaxws.DealReqResponse Exce ...

  2. PHP - 自定义函数

    第7章 自定义函数 学习要点: 1.标准函数 2.自定义函数 3.文件包含 4.魔法常量 一般来讲,冗余的代码都是不好的.一而再,再而三地重写代码不仅浪费时间,从布局结构角度看也显得粗制滥造.与所有优 ...

  3. Delphi XE7下如何创建一个Android模拟器调试

    利用Delphi XE7我们可以进行多种设备程序的开发,尤其是移动开发应用程序得到不断地加强.在实际的Android移动程序开发中,如果我们直接用android真机直接调试是非常不错.一是速度快,二是 ...

  4. WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇)

    原文:WCF技术剖析之十九:深度剖析消息编码(Encoding)实现(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话 ...

  5. Ubuntu 挂载ISO文件的方法

    1.在终端中输入:sudo mkdir /media/iso 在/media下生成一个iso文件夹用来挂载iso文件2.然后输入:sudo mount -o loop /home/X/X/XXXX.i ...

  6. [置顶] Windows Phone后台音乐详解一

    应用于: Windows Phone 8 | Windows PhoneOS 7.1 你可以为winphone编写在后台播放音乐的app.这表示即使当用户点击返回或开始按钮离开你的应用界面时,你的应用 ...

  7. [置顶] 浅谈Android的资源编译过程

    Android APK 一.APK的结构以及生成 APK是Android Package的缩写,即Android application package文件或Android安装包.每个要安装到Andr ...

  8. EasyUI - SearchBox 搜索框

    效果: html代码: <input id="ss"/> <div id="mm"> <div data-options=&quo ...

  9. perl post 请求带参数

    my $url='https://wenjinbao.winfae.com/business/dispatch_post.do?action=submitAdminLogin';    my $res ...

  10. boost::thread类

    前言 标准C++线程即将到来.预言它将衍生自Boost线程库,现在让我们探索一下Boost线程库. 几年前,用多线程执行程序还是一件非比寻常的事.然而今天互联网应用服务程序普遍使用多线程来提高与多客户 ...