记录下,使用方法
unit UMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdCustomTCPServer, IdTCPServer, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient,IdContext;
type
TForm1 = class(TForm)
idtcpclnt1: TIdTCPClient;
idtcpsrvr1: TIdTCPServer;
grp1: TGroupBox;
grp2: TGroupBox;
mmo1: TMemo;
btn1: TButton;
mmo2: TMemo;
btn2: TButton;
btn3: TButton;
procedure btn1Click(Sender: TObject);
procedure idtcpsrvr1Connect(AContext: TIdContext);
procedure idtcpsrvr1Execute(AContext: TIdContext);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure ClientThead();
begin
while True do
begin
Form1.mmo2.Lines.Add(Form1.idtcpclnt1.Socket.ReadLn);
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
begin
idtcpsrvr1.DefaultPort:= 6666;
idtcpsrvr1.Active:=True;
mmo1.Lines.Add('服务器启动完成');
end;
procedure TForm1.btn2Click(Sender: TObject);
begin
idtcpclnt1.Host:='127.0.0.1';
idtcpclnt1.Port:=6666;
idtcpclnt1.Connect;
end;
procedure TForm1.btn3Click(Sender: TObject);
var
Lp:Cardinal;
begin
idtcpclnt1.Socket.Write('Test');
CreateThread(nil,0,@ClientThead,nil,0,lp);
end;
procedure TForm1.idtcpsrvr1Connect(AContext: TIdContext);
begin
mmo1.Lines.Add(Format('%s 连接服务器',[AContext.Binding.IP]));
end;
procedure TForm1.idtcpsrvr1Execute(AContext: TIdContext);
var
pRecvBuffer:TBytes;
Len:Integer;
Rep:String;
begin
Len:=AContext.Connection.IOHandler.InputBuffer.Size;
AContext.Connection.IOHandler.ReadBytes(pRecvBuffer,Len);
if Length(pRecvBuffer) > 0 then
Begin
mmo1.Lines.Add(Format('-Recv Size = 0x%x',[Length(pRecvBuffer)]));
pRecvBuffer[Length(pRecvBuffer)]:=0;
mmo1.Lines.Add(AContext.Binding.IP + '->' + Strpas(@pRecvBuffer[0]));
Rep:=Format('收到数据[%s]',[Strpas(@pRecvBuffer[0])]);
AContext.Connection.IOHandler.Writeln(Rep);
End;
end;
end.
注:服务端和客户端必须对应,readln 对应 writeln ,readbytes 对应 writebytes