由于本人天生愚钝,所以关于聊天工具的编程一直都没学会,尽管网上教程一大堆,但是关于IdTCPClient  IdTCPServer 的不多,今天终于学会一些,分享给像我一样纠结的小伙伴,下一步学习多线程的聊天工具!

  界面如图:memo 2个  button 3个  labelEdit 3个 IdTCPClient  1个   IdTCPServer 1个 

 

 代码如下:

 

  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  8. IdCustomTCPServer, IdTCPServer, IdBaseComponent, IdComponent, IdTCPConnection,
  9. IdTCPClient, IdContext,IdGlobal;
  10.  
  11. type
  12. TForm1 = class(TForm)
  13. Memo1: TMemo;
  14. GroupBox1: TGroupBox;
  15. LabeledEdit1: TLabeledEdit;
  16. LabeledEdit2: TLabeledEdit;
  17. Button2: TButton;
  18. Button3: TButton;
  19. Label1: TLabel;
  20. Memo2: TMemo;
  21. IdTCPClient1: TIdTCPClient;
  22. IdTCPServer1: TIdTCPServer;
  23. GroupBox2: TGroupBox;
  24. LabeledEdit3: TLabeledEdit;
  25. Button1: TButton;
  26. procedure Button1Click(Sender: TObject);
  27. procedure Button2Click(Sender: TObject);
  28. procedure IdTCPServer1Connect(AContext: TIdContext);
  29. procedure Button3Click(Sender: TObject);
  30. procedure IdTCPServer1Execute(AContext: TIdContext);
  31. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  32. private
  33. { Private declarations }
  34. public
  35. { Public declarations }
  36. end;
  37.  
  38. var
  39. Form1: TForm1;
  40.  
  41. implementation
  42.  
  43. {$R *.dfm}
  44.  
  45. procedure TForm1.Button1Click(Sender: TObject); //监听
  46. begin
  47. IdTCPServer1.DefaultPort := StrToInt(LabeledEdit3.Text); //本地端口
  48. IdTCPServer1.Active := True; //打开监听
  49. end;
  50.  
  51. procedure TForm1.Button2Click(Sender: TObject); //远程连接
  52. begin
  53. if not IdTcpClient1.Connected then
  54. begin
  55. IdTCPClient1.Host := LabeledEdit1.Text;
  56. IdTCPClient1.Port := StrToInt(LabeledEdit2.Text);
  57. IdTCPClient1.Connect;
  58. IdTCPClient1.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8(); //中文处理 uses IdGlobal;
  59. end;
  60. end;
  61.  
  62. procedure TForm1.IdTCPServer1Connect(AContext: TIdContext); //有用户连接时候通知
  63. begin
  64. Memo1.Lines.Add('有朋友连接:');
  65. Memo1.Lines.Add(' ');
  66. AContext.Connection.IOHandler.DefStringEncoding := IndyTextEncoding_UTF8(); //中文处理 uses IdGlobal;
  67. end;
  68.  
  69. procedure TForm1.Button3Click(Sender: TObject); //发送信息
  70. begin
  71. IdTCPClient1.IOHandler.writeln('皮皮说:'+ Memo2.Text);
  72. end;
  73.  
  74. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); //关闭时断开连接
  75. begin
  76. IdTcpClient1.Disconnect;
  77. end;
  78.  
  79. procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); //接收信息
  80. var
  81. recstr:string;
  82. begin
  83. recstr := AContext.Connection.IOHandler.ReadLn;
  84. Memo1.Lines.Add(recstr);
  85. end;
  86.  
  87. end.

  

  

TCP聊天工具的实现的更多相关文章

  1. TCP聊天工具

    //前台书写 import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java ...

  2. 用Socket做一个局域网聊天工具(转)

    原文:http://www.cnblogs.com/technology/archive/2010/08/15/1799858.html 程序设计成为简单的服务端和客户端之间的通信, 但通过一些方法可 ...

  3. Python3 实现简易局域网视频聊天工具

    Python3 实现简易局域网视频聊天工具   1.环境 操作系统为 Ubuntu 16.04 python 3.5opencv-python 3.4.1.15numpy 1.14.5PyAudio ...

  4. 使用PHP+Swoole实现的网页即时聊天工具:PHPWebIM

    使用PHP+Swoole实现的网页即时聊天工具 全异步非阻塞Server,可以同时支持数百万TCP连接在线 同时支持websocket+comet2种兼容协议,可用于所有种类的浏览器包括IE 拥有完整 ...

  5. RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)

    RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...

  6. Web版的各种聊天工具

    直到近期为止,我们经常使用的即时聊天工具(QQ.msn等)了Web版,大家不用下载庞大软件,直接打开网页就能够与自己的好友聊天,非常方便.在此将时汇总        便于大家查找        节约大 ...

  7. python 开发简单的聊天工具

    python 太强大了,以至于它什么都可以做,哈哈,开个玩笑.但是今天要讲的真的是一个非常神奇的应用. 使用python写一个聊天工具 其实大家平时用的QQ类似的聊天工具,也是使用socket进行聊天 ...

  8. Java之简单的聊天工具

    今天整理资料的时候,找出自己几年前刚学Java时做过的一个简易的聊天工具,有服务器也有客户端,能发送文字消息和文件,但是用户上线并未存入数据库,而只是简单的缓存在服务器的一个数组中,所以,只要服务器一 ...

  9. 基于Nodejs开发的web即时聊天工具

    由于公司需要开发web即时聊天的功能,开始时我们主要的实施方法是用jquery的ajax定时(10秒)轮询向服务器请求,由于是轮询请求,对 服务器的压力比较大.我们网站上线的时间不长,访问量不是很大, ...

随机推荐

  1. 【VS工具】vs2017中的一些小功能

    一.json转为类 1.打开一个json文件,复制 2.打开一个.cs文件,将json粘贴为类 3.got it 二.C#交互窗口 1.视图->其他窗口->C#交互窗口  2.打开了一个窗 ...

  2. R语言查看栅格值

    有这么一个需求,知道栅格上的坐标,想看看这个坐标上的栅格值是多少.坐标长这个样子 那么这样的坐标下的栅格值该怎么看 cellFromXY(the.stack$t1,c( -1505000,683500 ...

  3. 什么是,session、cookies、token

    在一片文章上看到关于cookies和session 的解释,大概意思是这样的. 说你去星巴克喝咖啡,你平均一星期去两次,你的操作是看菜单,点咖啡.结账 加入你三星期不去,店员也许不及得你了,你依旧需要 ...

  4. python基础知识点(unittest)

    目录: unittest 单元测试框架 1.写用例: Testcase 2.执行:TestSuite 类 TestLoader 类 3.比对结果(期望值/实际值):断言函数 4.结果:TestText ...

  5. 软件安装(ubuntu) --Linux基础编程

    Ubuntu:一个以桌面应用为主的开源GNU/Linux操作系统 1.在线安装(Ubuntu Example) [安装]:sudo apt-get install 安装包的名字,或者:sudo apt ...

  6. Python 文件的基本操作

    打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可 ...

  7. CSS设计模式

    关于web设计的网站 https://www.smashingmagazine.com/

  8. angular 引入ocLazyLoad实现js、controller懒加载

    项目之前是直接在index.html中引用了controller.js,其中包含了所有的controller.现引入ocLazyLoad实现按需加载,到指定页面再加载指定js.controller 1 ...

  9. Goroutine通信与thread in java间的通信

    // This file contains the implementation of Go channels. // Invariants: //  At least one of c.sendq ...

  10. Curl实现ElasticSearch的增删改查

    一.添加数据(laravel必须安装Curl扩展) $data = [ 'username'=>"张三", 'sex'=>"女", 'age'=&g ...