【问题标题】:Indy TCP - Sending and receiving streamIndy TCP - 发送和接收流
【发布时间】:2014-01-03 06:51:13
【问题描述】:

以下是接收器接收流的方式。

 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;

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

【问题讨论】:

  • 不,这不会很好,从 Indy 脚下拉地毯。

标签: delphi delphi-7 indy10


【解决方案1】:

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

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

  2. 将数据分成更小的块,每个块都有自己的发送/接收调用,然后检查每个块之间的终止条件。

  3. 关闭套接字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2015-12-28
    • 2014-09-18
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多