接收器将如何接收流。
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;
取消正在发送或接收的流的正确方法是什么?
答案 0 :(得分:1)
强制内存访问错误是一种可怕的方式来中止发送/接收操作。我还有其他三种方法可以中止它:
在Indy自己的发送/接收逻辑的上下文中引发异常。要么在Indy的OnWork
事件中引发异常,要么派生一个新的TStream
类,在Write()
和Read()
实现中引发异常。
将数据拆分为较小的块,每个块都有自己的发送/接收呼叫,然后检查每个块之间的终止条件。
关闭套接字。