|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
我在做一個通訊的程序,在其中,我要將比較複雜的結構給傳過去(有許多的pointer和嵌入的pointer(多層的),寫的比較麻煩,和容易出錯,也就是如何將一個對像傳過去,我現在的做法是,寫一個類object,其他的要傳的類繼承它,object可以序列化在一個內存中,其他類中通過regist來將要傳的成員登記上去,讓object來做。我覺得是比較方便的。client可以從這個內存上序列得到數據。(可以加上一個objectostream,objectistream來用對像流來控制)
不知道大家有什麼高見?? |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
不論怎麼實現。必須保證傳輸的時候,數據是字節流的。
但是,如果者些字節流中存在指針引用等東西,傳輸過去毫無意義。 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
我的意思:
struct data1
{
int ID;
} |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
我的意思:
struct Point
{
int ID;
int x;
int y;
}
struct Line
{
int ID;
int PointNum;
Point *pPoint;
}
struct Object
{
int ID;
int LineNum;
Line *pLine;
int PointNum;
Point *pPoint;
}
該如何進行網絡傳輸一個Object(變為Bytecode,這個步驟是什麼關鍵的)。
到那邊在從ByteCode解吸出一個Object 對象。 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
一般都放在一個buf裡。 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
如果非常複雜, 可以分段傳輸.
不管怎樣, 要自己定義規則. 比如準備一個結構描述文件. |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
-->
用XML是不是一個好方法了??數據量會不會大?? |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
xml不錯。
另外我想說,java在這方面真是有先天的優勢。 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
太複雜化了吧? 除非你的結構真的複雜的不得了, 比如, 是一個樹結構.
我覺得可以參考一些中間件產品的處理方法.
--> |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
xml應該行 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
-->
是個什麼處理方法? |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
具體的我也不清處
但中間件就是針對這些複雜的數據傳輸的 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
樓主用什麼通訊協議? |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
如果是文本的話可以使用XML
二進制的話用不了
如果不是文本那麼自己定義報文格式
雙方都知道結構中每個變量的值從哪裡開始 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
協議,我自己定義,沒有什麼東西:
short Length;
short UserID;
size_t Indentity;
size_t MesageType;
DATA
不過DATA的數據可能很複雜,可能有樹結構,是ByteCode的,不是Text的,解吸很煩瑣的,對每個消息都用Memcpy是不行的,很 容易出錯且很多代碼。
我用C++來寫一個Object ,在Object 中有一個表來記錄它的兒子的Paramer(可以是複雜結構(但是必須從Object派生)),兒子的數值通過Regist到Object的列表中,用Object來序列化出一塊內存,方便又實用。可以實現對象的persist傳輸,很好的東西。但是如果對像很大,那序列化就不好了,費內存,大家有什麼好想法?? |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
可以通過報文解決你的問題,把信息分為報頭和報體,把公共的信息放入報頭,把自己的信息放入報體,然後作為一個字符串傳送。對方收到後在安裝報頭報體的結構進行解包,就可以解析出你想傳送的信息,報頭一般是定長的一個結構,報頭是變長的,是基於TAG的方式。一般銀行和證券的系統都是用這個方式傳送信息的。 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
還是把DATA放到文件中, 然後你的程序調用FTP或類似的東西把文件傳過去.
(如果你的DATA就是從文件中讀出來的, 那就不用讀了. 直接傳文件過去)
那邊通訊部分就簡單了. (分析文件另說) |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
這有什麼難的,MFC已經提供了一套完善的序列化機制,參照它我們一樣可以寫出不同類的相應處理 |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
我覺得XML最好.
二進制數據可以先進行UUencode, |
如何在通訊程序中將一個複雜的結構方便的傳過去和解吸。
將對像遠程打包傳遞在corba中是marshal的過程。也許你可以參考一下orb的打包機制。另外在rpc中也要考慮這個問題。但是我記得我以前用rpc,傳遞的參數內容不能包括指針。
這篇文檔有個XML marshal和java object 的轉換描述,看看對你有沒有借鑒作用。
http://www-900.ibm.com/developerWorks/cn/java/l-Zeus/index.shtml |
| |