TServerSocket 如何傳遞 record 記錄類型 |
答題得分者是:G01
|
lweiyis
一般會員 發表:1 回覆:1 積分:0 註冊:2005-10-17 發送簡訊給我 |
服務端定義記錄類型如下:
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 發送簡訊給我 |
因為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 發送簡訊給我 |
|
G01
高階會員 發表:249 回覆:379 積分:215 註冊:2002-05-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |