delphi - 如何获取socket.SendStream的进度?

时间:2010-05-13 03:54:53

标签: delphi

我使用dephi7的客户端/服务器套接字组件从客户端向服务器发送带有tfilestream的文件。

我能够获得服务器端收到的文件的进度, 但在客户端,我如何获得发送文件的进度?

这是我发送文件的方式:

  fstream:=tfilestream.Create(opendialog1.FileName,fmOpenRead);
  clientsocket1.Socket.SendStream(fstream);

感谢并感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

TClientSocket似乎不提供任何有关其进度的反馈。我看到两种选择:

  1. 而不是SendStream,在循环中使用TStream.ReadTClientSocket.Socket.SendBuf。从流中读取一个数据块然后发送它。重复,直到到达流的末尾。

  2. 编写一个包含(或装饰)另一个流的TStream后代类。它的ReadWriteSeek方法可以简单地转发到包装流,但您也可以向包装器添加一些事件,以便每次套接字代码读取时都会收到通知。流中的数据块 - SendStream方法基本上与我在第一种方案中描述的相同。