IdTCPServer 、IdTCPClient

//OnConnect事件 连接成功后触发
//获取IP及端口信息 
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
begin
   AContext.Connection.Socket.Binding.PeerIP;
   AContext.Connection.Socket.Binding.PeerPort;
end;
//IdTCPClient 内存流发送方式
Var //全局变量
  RStream: TMemoryStream;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RStream := TMemoryStream.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo2.Lines.SaveToStream(RStream, TEncoding.UTF8);
  RStream.Position := 0;
  IdTCPClient1.IOHandler.Write(RStream);
  RStream.Clear;
end;
//IdTCPServer 内存流接收方式
Var //全局变量
  RStream: TMemoryStream;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RStream := TMemoryStream.Create;
end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
Var
  Hb: TIdIOHandler;
  TempStr: TStrings;
begin
  Hb := AContext.Connection.IOHandler;
  if not Hb.InputBufferIsEmpty then
  begin
    Hb.CheckForDisconnect(True, True);
    Hb.ReadStream(RStream, Hb.InputBuffer.Size);
    TempStr := TStringList.Create;
    RStream.Position := 0;
    TempStr.LoadFromStream(RStream);
    RichEdit1.Lines.AddStrings(TempStr);
    TempStr.Free;
    RStream.Clear;
  end;
  Sleep(100);
end;
//IdTCPServer 内存流发送方式
Var //全局变量
  RStream: TMemoryStream;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RStream := TMemoryStream.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
Var
  I: Integer;
  AContext: TIdContext;
begin
  With IdTCPServer1.Contexts.LockList do
  Begin
    for I := 0 to Count - 1 do
    Begin
      AContext := TIdContext(Items[I]);
      // if AContext.Binding.PeerIP <> '127.0.0.1' then   //向指定IP发送数据
      // continue;
      Memo2.Lines.SaveToStream(RStream, TEncoding.UTF8);
      RStream.Position := 0;
      AContext.Connection.IOHandler.Write(RStream);
      RStream.Clear;
    End;
  End;
End;
//IdTCPClient 内存流接收方式
//需要添加两个控件 IdAntiFreeze 和 Timer
Var //全局变量
  RStream: TMemoryStream;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RStream := TMemoryStream.Create;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
Var
  I: Integer;
  TempStr: TStrings;
Begin
  if Not IdTCPClient1.Connected then
    Exit;
  I := IdTCPClient1.IOHandler.InputBuffer.Size;
  if I > 0 then
  Begin
    IdTCPClient1.IOHandler.ReadStream(RStream, I);
    TempStr := TStringList.Create;
    RStream.Position := 0;
    TempStr.LoadFromStream(RStream);
    RichEdit1.Lines.AddStrings(TempStr);
    TempStr.Free;
    RStream.Clear;
  End;
End;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值