热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TCP聊天工具的实现

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

  由于本人天生愚钝,所以关于聊天工具的编程一直都没学会,尽管网上教程一大堆,但是关于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.

 

 

  

  


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
author-avatar
276443071_7309cb
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有