全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1676
推到 Plurk!
推到 Facebook!

請教要如何利用(TObject *Sender)來減少重複程式?

答題得分者是:Justmade
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-09 17:59:14 IP:61.220.xxx.xxx 未訂閱
小弟正在寫一個網路連結程式,主要是單一Client要去抓取多個Server的資料,小弟用的主要元件為ClientSocket及ServerSocket,但是由於ClientSocket較多且功能都相同,只是對應到不同的連線,是不是可以利用(TObject *Sender)中的Sender參數來減少重複程式(如ClientSocket1Read,ClientSocket2Read,ClientSocket3Read用ClientSocketRead來全部概括)呢? 如蒙賜教,不勝感激!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-09 18:42:09 IP:218.16.xxx.xxx 未訂閱
你可以用 TypeCast 來處理 因為 Sender 一定是 TClientSocket 所以你可以用 (TClientSocket *Sender)->XXX 來存取對應的 ClientSocket 如 : MyHost = (TClientSocket *Sender)->Host;
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-09 18:55:05 IP:61.220.xxx.xxx 未訂閱
感謝Justmade 大哥的回應! 您說的方法似乎是很不錯,但是我還有一點問題:就是我每個ClientSocket所接收到的資料都想要存到不同的MemoryStream中,這時候該怎麼做呢? (如ClientSocket1對應到msFile1;ClientSocket2對應到msFile2等等…) 再次感謝您的答覆!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-09 19:13:21 IP:218.16.xxx.xxx 未訂閱
找出到底是幾號 1. 你可用從 (TClientSocket *Sender).Name 找出是幾號 或 2. 你可在 ClientSocketX.Tag 存放號數來分辦是幾號 找出合適的 MemoryStream 由於 MemoryStream 不是元件所以不能用 FindComponent 方法找出合適的,你可以用一個 Array 或 TList 來裝著這些 MemoryStream 的 Pointer, 在找到是幾號後使用 另外,新的問題請儘量開新題目因為懂的人不一定是同一個人,開新提目會較容易得到合適的答案。
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-10 08:57:39 IP:61.220.xxx.xxx 未訂閱
再度感謝Justmade 大哥的回應! 我會試著嘗試看看的,謝啦!
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-22 14:41:29 IP:61.220.xxx.xxx 未訂閱
上次得到Justmade版主大哥的回答後,由於一直在處理別的問題,直到最近才有機會來試看看版主大哥的建議,但是小弟試過後會出現問題,以下是程式碼摘要: void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { AnsiString command = Socket->ReceiveText(); AnsiString filename,msg; if (command=="Command_1") { msg = "Command_1 was Received" ; SendMessage(Sender,msg); } } void TForm1::SendImage(TObject *Sender,AnsiString msg) { (TServerSocket *Sender)->Socket->Connections[0]->SendText(msg); } 出現的錯誤訊息為: [C Error] Unit1.cpp(204): E2108 Improper use of typedef 'TServerSocket' 請Justmade大哥或者其它版上高手們幫幫忙,先謝啦!▲
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-22 15:31:54 IP:61.220.xxx.xxx 未訂閱
引言: 上次得到Justmade版主大哥的回答後,由於一直在處理別的問題,直到最近才有機會來試看看版主大哥的建議,但是小弟試過後會出現問題,以下是程式碼摘要: void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender, TCustomWinSocket *Socket) { AnsiString command = Socket->ReceiveText(); AnsiString filename,msg; if (command=="Command_1") { msg = "Command_1 was Received" ; SendMessage(Sender,msg); } } void TForm1::SendImage(TObject *Sender,AnsiString msg) { (TServerSocket *Sender)->Socket->Connections[0]->SendText(msg); } 出現的錯誤訊息為: [C Error] Unit1.cpp(204): E2108 Improper use of typedef 'TServerSocket' 請Justmade大哥或者其它版上高手們幫幫忙,先謝啦!▲
小弟自己亂試了一下,發現可能要用((TServerSocket *)Sender)來取得ServerSocket才比較對,但是經過測試發現會有錯誤,小弟去看取出來的內容好像不太對,因此執行後不知道是當在那邊,能否有那位前輩能給個Socket的例子來給小弟了解? 謝謝!
系統時間:2024-04-29 1:35:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!