我使用dephi7的客户端/服务器套接字组件从客户端向服务器发送带有tfilestream的文件。
我能够获得服务器端收到的文件的进度, 但在客户端,我如何获得发送文件的进度?
这是我发送文件的方式:
fstream:=tfilestream.Create(opendialog1.FileName,fmOpenRead);
clientsocket1.Socket.SendStream(fstream);
感谢并感谢您的帮助。
答案 0 :(得分:5)
TClientSocket
似乎不提供任何有关其进度的反馈。我看到两种选择:
而不是SendStream
,在循环中使用TStream.Read
和TClientSocket.Socket.SendBuf
。从流中读取一个数据块然后发送它。重复,直到到达流的末尾。
编写一个包含(或装饰)另一个流的TStream
后代类。它的Read
,Write
和Seek
方法可以简单地转发到包装流,但您也可以向包装器添加一些事件,以便每次套接字代码读取时都会收到通知。流中的数据块 - SendStream
方法基本上与我在第一种方案中描述的相同。