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

标签 delphi

我使用dephi7的客户端/服务器套接字组件通过tfilestream将文件从客户端发送到服务器。

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

这是我发送文件的方式:

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

感谢并感谢您的帮助。

最佳答案

看起来TClientSocket没有提供任何进度反馈。我看到两种选择:

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

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

关于delphi - 如何获取socket.SendStream的进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2824326/

相关文章:

delphi - 为什么Delphi编译器不内联汇编函数?

delphi - JclLastExceptStackListToStrings 生成一个空字符串列表

Delphi 无法从 VertScrollBox 中删除子项

delphi - 获取打开新表单的表单的名称

delphi - 为什么 {$ifopt FINITEFLOAT ON} 无法编译?

oracle - 报表生成器-多种语言的报表

delphi - C++ Builder vs Delphi vs MFC

德尔福数学: Why is 0. 7<0.70?

delphi - Delphi中的静态多态

delphi - 如果加载 dll 找不到依赖项,有什么方法可以捕获错误吗?