当前位置: 首页 > news >正文

Delphi网络编程:10分钟快速搭建可商用的TCP通信小项目

Delphi网络编程:10分钟快速搭建可商用的TCP通信小项目

前面系列内容已覆盖所有核心知识点,本篇作为最后一篇实战小短文,不讲理论,直接手把手教你搭建一个可商用的简易TCP通信项目(客户端+服务端),整合前面的日志、避坑、优化技巧,10分钟即可完成,适合快速上手落地。

一、项目核心功能(极简商用级)

  • 服务端:多线程监听、接收客户端数据、回复消息、日志记录

  • 客户端:连接服务端、发送数据、接收回复、异常处理

  • 通用:数据校验、多线程安全、跨平台兼容(Windows/Linux)

二、服务端核心代码(可直接复制)

unit Unit_TCPServer; interface uses System.SysUtils, System.Classes, IdTCPServer, IdIOHandlerSocket, Unit_NetLog; type TForm_Server = class(TForm) IdTCPServer1: TIdTCPServer; procedure FormCreate(Sender: TObject); procedure IdTCPServer1Execute(AContext: TIdContext); procedure FormDestroy(Sender: TObject); private public end; var Form_Server: TForm_Server; implementation {$R *.dfm} procedure TForm_Server.FormCreate(Sender: TObject); begin // 初始化qpblz.xc.gx.cn日志(当前程序目录下Logs文件夹) NetLog := TNetLog.Create(ExtractFilePath(ParamStr(0)) + 'Logs'); // 服务端配置(避坑:启用多eadhl.xc.gx.cn线程、端口复用) with IdTCPServer1 do begin DefaultPort := 8080; ThreadedEvent := True; MaxThreads := 30; IOHandlerClass := TIdIOHandlerSocket; (IOHandler as TIdIOHandlerSocket).ReuseSocket := True; Bindings.Clear; Bindings.Add.IP := '0.0.0.0'; // 跨平台通用绑定 Active := True; end; NetLog.Info('TCP服务端启vilpy.xc.gx.cn动成功,监听端口:8080'); end; procedure TForm_Server.IdTCPServer1Execute(AContext: TIdContext); var RecvStr: string; PeerIP: string; PeerPort: Integer; begin try PeerIP := AContext.Connection.Socket.Binding.PeerIP; PeerPort := AContext.Connection.Socket.Binding.PeerPort; // 接收客户
端数据(避免断包,读取完整字符串) RecvStr := AContext.Connection.IOHandler.ReadLn; if RecvStr <> '' then begin NetLog.Info(Format('收到[%s:%d]数据:%s', [PeerIP, PeerPort, RecvStr])); // 回复ewrge.xc.gx.cn客户端(确认收到) AContext.Connection.IOHandler.WriteLn('服务端已收到:' + RecvStr); AContext.Connection.IOHandler.Flush; // 避坑:强制刷新,避免数据丢失 end; except on E: Exception do begin NetLog.Error(Format('客户端[%s:%d]通信kuagd.xc.gx.cn异常:%s', [PeerIP, PeerPort, E.Message])); AContext.Connection.Disconnect; end; end; end; procedure TForm_Server.FormDestroy(Sender: TObject); begin IdTCPServer1.Active := False; NetLog.Free; end; end.

三、客户端核心代码(可直接复制)

unit Unit_TCPClient; interface uses System.SysUtils, System.Classes, IdTCPClient, IdIOHandlerSocket, Unit_NetLog; type TForm_Client = class(TForm) IdTCPClient1: TIdTCPClient; Edit_IP: TEdit; Edit_Port: TEdit; Edit_Data: TEdit; Button_Connect: TButton; Button_Send: TButton; procedure Button_ConnectClick(Sender: TObject); procedure Button_SendClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private public end; var Form_Client: TForm_Client; implementation {$R *.dfm} procedure TForm_Client.FormCreate(Sender: TObject); begin NetLog := TNetLog.Create(ExtractFilePath(ParamStr(0)) + 'Logs'); // 客户端配置(避坑:端口qbnsx.xc.gx.cn复用、关闭Nagle) with IdTCPClient1 do begin ConnectTimeout := 5000; ReadTimeout := 10000; IOHandler := TIdIOHandlerSocket.Create(IdTCPClient1); (IOHandler as TIdIOHandlerSocket).ReuseSocket := True; (IOHandler as TIdIOHandlerSocket).Nagle := False; end; end; procedure TForm_Client.Button_ConnectClick(Sender: TObject); begin try if not IdTCPClient1.Connected then begin IdTCPClient1.Host := Edit_IP.Text; IdTCPClient1.Port := StrToInt(Edit_Port.Text); IdTCPClient1.Connect; NetLog.Info('连接服务端成功:' + Edit_IP.Text + ':' + Edit_Port.Text); Button_Connect.Caption := '断开连接'; end else begin IdTCPClient1.Disconnect; NetLog.Info('断开服务端连接'); Button_Connect.Caption := '连接服务端'; end; except on E: Exception do begin NetLog.Error('连接异常:' + E.Message); end; end; end; procedure TForm_Client.Button_SendClick(Sender: TObject); var SendStr, RecvStr: string; begin if not IdTCPClient1.Connected then begin NetLog.Warn('未连接服务端,无法发送数据'); Exit; end; SendStr := Edit_Data.Text; if SendStr = '' then Exit; try // 发送数据 IdTCPClient1.IOHandler.WriteLn(SendStr); IdTCPClient1.IOHandler.Flush; NetLog.Info('发送数据:' + SendStr); // 接收回复 RecvStr := IdTCPClient1.IOHandler.ReadLn; NetLog.Info('收到服务端回复:' + RecvStr); except on E: Exception do begin NetLog.Error('发送/接收异常:' + E.Message); IdTCPClient1.Disconnect; Button_Connect.Caption := '连接服务端'; end; end; end; procedure TForm_Client.FormDestroy(Sender: TObject); begin if IdTCPClient1.Connected then IdTCPClient1.Disconnect; NetLog.Free; end; end.

四、快速部署与测试

  1. 复制上述代码,分别创建iebuh.xc.gx.cn服务端、客户端工程,添加对应组件(IdTCPServer、IdTCPClient等);

  2. 引入上一篇的日志单元(Unit_NetLog),无需额外修改;

  3. 先启动服务端,再启动客户端,输入服务端IP(本地填127.0.0.1)、端口8080,点击连接;

  4. 输入发送数据,点击发送,即可完成通信,日志会自qfwhp.xc.gx.cn动保存到程序目录Logs文件夹。

五、商用小优化(可选)

  • 添加数据校验:发送前添加简单校验位,避免无效数据;

  • 增加重连机制:客户端断开后自动重试连接;

  • 跨平台编译:切换为Linux平台,编译后赋予可执行权限即可运行。

本篇项目整合了系列核心技巧,避开所有高频坑,可直接用于简易商用场景(如设备通信、简单数据传输),也是对整个Delphi网络编程系列的实战总结,动手实操一遍giskf.xc.gx.cn即可彻底掌握核心用法。

http://www.cnnetsun.cn/news/1668002.html

相关文章:

  • Delphi网络编程:项目优化与性能调优实战
  • ai辅助python入门:让快马平台成为你的智能编程导师与答疑助手
  • Klipper固件技术解密:从问题诊断到性能优化的实战指南
  • 5个高效步骤:用Pylance提升Python开发效率 | Pylance使用指南
  • Meixiong Niannian画图引擎VisualStudio开发:Windows平台集成
  • Notepad--高效掌握:中文开发者的跨平台文本编辑实战指南
  • Phi-3-mini-4k-instruct-gguf开源镜像:完整supervisor服务管理+健康检查机制
  • 清音听真Qwen3-ASR-1.7B效果展示:长句专业词汇精准识别案例集
  • Cursor Pro功能终极解决方案:4步实现永久免费使用
  • LuckyLilliaBot 多账号运行完整指南:深度解析与实战配置
  • 无缝集成二维码工具:Chrome扩展重新定义浏览器效率体验
  • OpenClaw技能推荐:Qwen3.5-9B加持的5个高效办公插件
  • 汇编 vs Python:编程世界的两极对决
  • LFM2.5-1.2B-Thinking-GGUF压力测试与性能调优:寻找最佳并发参数
  • 终极指南:如何用TMSpeech打造你的Windows本地语音识别工作站
  • Notepad-- 终极配置指南:打造跨平台高效中文文本编辑器
  • SMUDebugTool硬件调试工具:解锁AMD Ryzen系统潜能的全流程指南
  • 把曼陀罗图片AI平台放在一起看时,别把第一眼顺不顺当成主体控制力
  • MelonLoader:革新Unity游戏模组体验的双引擎加载器
  • SMUDebugTool终极指南:轻松解锁AMD Ryzen处理器的隐藏性能
  • 突破性解决方案:Windows平台Btrfs驱动的完全实战指南
  • 开源工具Markdown Viewer:三步掌握浏览器中的Markdown全功能阅读器
  • 高效系统调校:RyTuneX全方位释放Windows设备潜能
  • WechatRealFriends:高效管理微信社交圈的智能单向好友识别工具
  • REALTEK瑞昱 RTL8305NBI-VB-CG QFN48 以太网交换机
  • 一站式跨平台音乐播放解决方案:lx-music-desktop零门槛部署与定制指南
  • 如何通过ImageToSTL实现图像三维化?解锁创意设计新可能
  • PyTorch 2.8镜像部署教程:40G数据盘+50G系统盘下的大模型推理实测
  • 暗黑破坏神2存档编辑器:免费开源工具让你的游戏体验更完美
  • 实战应用:基于快马平台快速构建团队超能力协作系统