跟上一版本相比,服务器没怎么改,但客户端几乎重写。
服务器代码:
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