線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2395
推到 Plurk!
推到 Facebook!

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

尚未結案
takdick
一般會員


發表:50
回覆:63
積分:22
註冊:2002-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-15 17:46:43 IP:219.77.xxx.xxx 訂閱
以下是一段用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;
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-16 20:44:40 IP:61.60.xxx.xxx 訂閱
(1) TClientSocket 元件接收資料的時候,會觸發 OnRead Event => Occurs when a client socket should read information from the socket connection.
(2) TClientSocket 元件傳送資料的時候,會觸發 OnWrite Event => Occurs when a client socket should write information to the socket connection.
(3) 以上的說明,在 Delphi Help 裡面都可以查詢到喔
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
takdick
一般會員


發表:50
回覆:63
積分:22
註冊:2002-08-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-17 10:03:34 IP:203.218.xxx.xxx 訂閱
procedure TForm1.cs3Write(Sender: TObject; Socket: TCustomWinSocket);
begin
counter:=counter 1;
caption:=inttostr(counter);
end;

發送幾MB或幾十MB的文件,counter都只是加1,而我是想讓程序正在發送文件(用sendstream)的過程中一直觸發事件,直到發送完畢.
請再指教,謝謝.
編輯記錄
takdick 重新編輯於 2008-10-17 11:30:55, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-17 12:52:32 IP:203.70.xxx.xxx 未訂閱
TClientSocket.ClientType
type TClientType = (ctNonBlocking, ctBlocking);

TCustomServerSocket.ServerType
type TServerType = (stNonBlocking, stThreadBlocking);


Blocking 與 NonBlocking 的寫法考量點不同喔...
takdick
一般會員


發表:50
回覆:63
積分:22
註冊:2002-08-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-17 14:36:42 IP:219.77.xxx.xxx 訂閱
不解,能詳細說明一下該怎麼做嗎?謝謝.

===================引 用 jow 文 章===================
TClientSocket.ClientType
type TClientType = (ctNonBlocking, ctBlocking);

TCustomServerSocket.ServerType
type TServerType = (stNonBlocking, stThreadBlocking);


Blocking 與 NonBlocking 的寫法考量點不同喔...
takdick
一般會員


發表:50
回覆:63
積分:22
註冊:2002-08-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-21 16:45:58 IP:219.77.xxx.xxx 訂閱
請多多指教,拜託...
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-22 15:21:47 IP:61.222.xxx.xxx 訂閱
自己重寫 SendStream 並處理進度就可以了。

===================引 用 takdick 文 章===================
procedure TForm1.cs3Write(Sender: TObject; Socket: TCustomWinSocket);
begin
counter:=counter 1;
caption:=inttostr(counter);
end;

發送幾MB或幾十MB的文件,counter都只是加1,而我是想讓程序正在發送文件(用sendstream)的過程中一直觸發事件,直到發送完畢.
請再指教,謝謝.
takdick
一般會員


發表:50
回覆:63
積分:22
註冊:2002-08-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-10-22 18:38:00 IP:203.218.xxx.xxx 訂閱
我在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)
該如何做到?
(我很菜但又急需解決此問題,還請詳細說明一下,謝謝.)
系統時間:2024-04-20 20:59:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!