小编GBM*_*GBM的帖子

Delphi Indy客户端发送64 KB软件包,Server接收2个软件包,总计64 KB

使用TIdTCPServerIndy 的组件,一个包以两个分数接收,但客户端发送一个64 KB.

如何在Server OnExecute事件中收到完整的包?

现在我放置一个原型(服务器和客户端)代码来重新创建这种情况.

服务器代码

procedure TFrmServer.IdTCPServer1Execute(AContext: TIdContext);
Var
  ReceivedBytesTCP : Integer;
  IBuf : TIdBytes;
begin
  if Not AContext.Connection.IOHandler.InputBufferIsEmpty then Begin
    Try
      ReceivedBytesTCP := AContext.Connection.IOHandler.InputBuffer.Size;
      SetLength(IBuf,ReceivedBytesTCP);
      AContext.Connection.IOHandler.ReadBytes(IBuf,ReceivedBytesTCP,False);
      AContext.Connection.IOHandler.Write(IBuf,Length(IBuf),0);
    Except
      On E : Exception Do Begin
        Memo1.Lines.Add('Except Server TCP: ' + E.Message);
      End;
    End;
  End Else Begin
    Sleep(1);
  End;
end;
Run Code Online (Sandbox Code Playgroud)

客户代码

procedure TFrm_TCP_Client.BtnSendClick(Sender: TObject);
Var
  IBuf,RBuf : TIdBytes;
  I         : Integer;
  LenPacket : Integer;
begin
  LenPacket := StrToInt(EdtLength.Text);
  if IdTCPClient1.Connected then Begin
    SetLength(IBuf,LenPacket);
    for I := …
Run Code Online (Sandbox Code Playgroud)

delphi tcp indy

1
推荐指数
1
解决办法
133
查看次数

标签 统计

delphi ×1

indy ×1

tcp ×1