[ v1.2 改进版,不过仍然失败 ]IdTCPClient / IdTCPServer + 心跳机制

在v1.2版本中,针对IdTCPClient和IdTCPServer,博主进行了心跳机制的改进尝试。尽管客户端进行了大规模重写,但最终仍然未能达到预期效果。服务器端改动较小,主要焦点在于客户端的重构和心跳机制的实现细节。
摘要由CSDN通过智能技术生成

跟上一版本相比,服务器没怎么改,但客户端几乎重写。


服务器代码:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent, IdTCPServer,
  IdAntiFreezeBase, IdAntiFreeze, StrUtils;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    ListBox1: TListBox;
    StatusBar1: TStatusBar;
    btnStart: TButton;
    btnStop: TButton;
    IdTCPServer1: TIdTCPServer;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure btnStartClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure IdTCPServer1Connect(AThread: TIdPeerThread);
    procedure IdTCPServer1Execute(AThread: TIdPeerThread);
  private
    { Private declarations }
  public
    { Public declarations }
    strLog, strRecived: String;     //strLog日志记录  strRecived接收到的信息
    procedure AddLog();
    procedure ShowRecived();
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//启动管理机服务
procedure TForm1.btnStartClick(Sender: TObject);
begin
  IdTCPServer1.DefaultPort := StrtoInt(Edit1.Text);
  IdTCPServer1.Active := true;
  btnStart.Enabled := false;
  btnStop.Enabled := true;
  ListBox1.Items.Add(Datetimetostr(now) + ' ' + '服务器启动成功!')
end;

//关闭管理机服务
procedure TForm1.btnStopClick(Sender: TObject);
begin
  IdTCPServer1.Active := false;
  btnStart.Enabled := true;
  btnStop.Enabled := false;
  ListBox1.Items.Add(Datetimetostr(now) + ' ' +'服务器已经停止!')
end;

//当有客户端连入时触发
procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
begin
  Listbox1.Items.Add(Datetimetostr(now) + ' ' + '客户端 ' + AThread.Connection.Socket.Binding.PeerIP + ' 请求已收到。');
  AThread.Connection.WriteLn('01: 欢迎连接到管理机!');
end;

//当C/S通讯时触发
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  strCommand: String;
  blnWrongOrder : boolean;      //是否是错误的命令
begin
  blnWrongOrder := false;
  with AThread.Connection do
  begin
    //读取客户机发来的内容
    strCommand := ReadLn();
    //日志
    strLog := strCommand + ' 来自考试机 ' + AThread.Connection.Socket.Binding.PeerIP;
 
    //如果发来的是数据
    if AnsiStartsText('DATA ', strCommand) then
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值