Indy TCP - 发送和接收流

时间:2014-01-03 06:51:14

标签: delphi delphi-7 indy10

接收器将如何接收流。

 Ms := TMemoryStream.Create;

    try
      Ms.Position := 0;
      Connection.IOHandler.LargeStream := True;
      Connection.IOHandler.ReadStream(Ms, -1,false);
    finally
      Ms.Free;
    end; 

如果接收者想取消它

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  try Ms.Free; except end; 
end;

这不行,应用程序有时会关闭。

也适用于发件人...

    Ms := TMemoryStream.Create;

    try
      Ms.Position := 0;
      Connection.IOHandler.LargeStream := True;
      Connection.IOHandler.Write(Ms, 0, True);
    finally
      Ms.Free;
    end; 

与取消流中的发件人相同。

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  try Ms.Free; except end; 
end;

取消正在发送或接收的流的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

强制内存访问错误是一种可怕的方式来中止发送/接收操作。我还有其他三种方法可以中止它:

  1. 在Indy自己的发送/接收逻辑的上下文中引发异常。要么在Indy的OnWork事件中引发异常,要么派生一个新的TStream类,在Write()Read()实现中引发异常。

  2. 将数据拆分为较小的块,每个块都有自己的发送/接收呼叫,然后检查每个块之间的终止条件。

  3. 关闭套接字。