如何才能得知程序正在使用sendstream傳送文件中?(100分)

  • 主题发起人 主题发起人 takdick
  • 开始时间 开始时间
T

takdick

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是一段用socket來傳送和接收文件的代碼.
程序在接收時有觸發onread事件,但在發送時使用sendstream卻沒有.
想問的是:如何才能得知程序正在使用sendstream傳送文件中?


procedure TForm1.cs3Read(Sender: TObject; Socket: TCustomWinSocket);
var
len3:integer;
buf3:array [0..10000] of byte;
begin

counter:=counter+1; //counter:=1;
caption:=inttostr(counter); //發送時使用sendstream,counter加1後就沒再繼續增加

if (updown=222) and (socket.ReceiveText='go~') then //send file
begin
socket.SendStream(fs3);
exit;
end;

if updown=111 then //receive file
begin
filesize:=strtoint(socket.ReceiveText);
updown:=999;
socket.SendText('go~');
end
else
begin
len3:=socket.ReceiveLength;
socket.ReceiveBuf(buf3,len3);
if fs3.Size < filesize then
fs3.Write(buf3,len3);
if fs3.Size >= filesize then
begin
fs3.Free;
socket.Close;
end;
end;
 
自己写SendStream,然后每发送一笔里面调用自己的OnSendStream即可!
如何写,在SendStrem中按Ctrl+鼠标左键!
 
在SendStrem中按Ctrl+鼠标左键,來到這裡:

function TCustomWinSocket.SendStream(AStream: TStream): Boolean;
begin
Result := False;
if FSendStream = nil then
begin
FSendStream := AStream;
Result := SendStreamPiece;
end;
end;

是直接在裡面新增代碼嗎?如我想每發送一筆就讓
Form1.caption:=inttostr(counter+1)
該如何做到?
(我很菜,請不吝賜教,謝謝.)
 
其实并非一个大文件能用SendStream发送,而是SendStream里面也是一小块一小快的发送的!
 
這點我清楚.
我是想在sendstream發送每一小塊時就觸發一事件(如counter+1),直到發送完成.
 
help,please...
 
后退
顶部