藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 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



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com