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

TServerSocket 如何傳遞 record 記錄類型

答題得分者是:G01
lweiyis
一般會員


發表:1
回覆:1
積分:0
註冊:2005-10-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-17 14:51:40 IP:218.5.xxx.xxx 未訂閱
服務端定義記錄類型如下: type TRec = packed record mTitle : string; mSize : integer; mArray : array[0..2] of string; end; var mRec : TRec; 1. 服務端TServerSocket如何將 mRec 傳遞到 TClientSocket ? 2. 用戶端TClientSocket如何接收這個資料? ---------------------------------------------------------------- 我通過以下方式進行,但是不行: (Server端 和 Client端 都定義了 record 類型) type TRec = packed record mTitle : string; mSize : integer; mArray : array[0..2] of string; end; var mRec : TRec; ------------------------------- Server 端: =========== ServerSocket1.Socket.Connections[0].SendBuf(mRec, sizeof(mRec)); Client 端: ========== Socket.ReceiveBuf(mRec, Socket.ReceiveLength); 以上不能正確接收 mRec 內容? 是否有其他方法?
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-14 21:53:56 IP:61.64.xxx.xxx 未訂閱
因為record類別與一個Process中,Memory的對應有關係,所以實際而言 在兩個Process間,要AProcess參考BProcess的Record結構有其困難 當然,從跨Process間的Memory共享,可以做到;但是跨機器且跨Process呢? 而.WinSocket架構的程式來說,這樣的架構卻是常見的(Client & Server分別在兩個機器的個別Process中);所以,你不可能在這樣的架構中傳遞Record Type 但,卻可以傳遞Record的資料值....問題只是...How ?? 因為Socket架構以傳遞字串為其擅長的工作方式,所以我們要借重這一點 可是問題來了,Record的每一個資料項目都相當清楚;一但化為字串該如何 實作才能計輕鬆又清楚呢?(因為要解析字串實在是一件煩人的工作!!) 所以我們要再借重TStringList這個類別,要如何做呢? 1.假設 A :TRec; 宣告要輸出的字串為tmpOutStr:string; TmpOutStr := 'mTitle=' A.mTitle #13 'mSize=' IntToStr(A.mSize) #13 'mArray[0]=' A.mArray[0] #13 'mArray[1]=' A.mArray[1] #13 'mArray[2]=' A.mArray[2]; 然後在Server端將 TmpOutStr 輸出 2.在Client端,將接收到的字串資料,放到一個string變數(假設是tmpStr) 宣告ts:TStringList; B :TRec; ts := TstringList.Create; ts.CommaText := tmpStr; //如此一來我們就可以取值 B.mTitle := ts.Values['mTitle']; B.mSize := StrToInt(ts.Values['mSize']); B.mArray[0] := ts.Values['mArray[0]']; B.mArray[1] := ts.Values['mArray[1]']; B.mArray[2] := ts.Values['mArray[2]']; //最後再釋放ts ts.Clear; ts.Free; ts := nil; 這樣就完成了!! 努力不一定成功 , 不努力一定不成功!!
lweiyis
一般會員


發表:1
回覆:1
積分:0
註冊:2005-10-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-15 08:41:51 IP:218.5.xxx.xxx 未訂閱
非常感謝, 你的處理方法很特別! 不知道這種實現方法它的效率如何? 我目前的做法是: 在接收事件中, 利用緩衝區來接收, Socket.ReceiveBuf(Bfr^, iLen);
G01
高階會員


發表:249
回覆:379
積分:215
註冊:2002-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-15 18:36:08 IP:61.64.xxx.xxx 未訂閱
想想看,你用MSN or QQ 去傳一堆對話內容....速度快不快? 努力不一定成功 , 不努力一定不成功!!
系統時間:2024-05-14 11:29:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!