如何才能得知程序正在使用sendstream傳送文件中? |
尚未結案
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
以下是一段用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 發送簡訊給我 |
(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 發送簡訊給我 |
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 發送簡訊給我 |
|
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
不解,能詳細說明一下該怎麼做嗎?謝謝.
===================引 用 jow 文 章=================== TClientSocket.ClientType type TClientType = (ctNonBlocking, ctBlocking); TCustomServerSocket.ServerType type TServerType = (stNonBlocking, stThreadBlocking); Blocking 與 NonBlocking 的寫法考量點不同喔... |
takdick
一般會員 發表:50 回覆:63 積分:22 註冊:2002-08-05 發送簡訊給我 |
|
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
自己重寫 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 發送簡訊給我 |
我在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) 該如何做到? (我很菜但又急需解決此問題,還請詳細說明一下,謝謝.) |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |