輕鬆定義自己的網路通訊協議

2021-03-31 08:56:57 字數 2975 閱讀 7624

最近突然想到乙個點子,可以用物件序列化技術將物件直接轉換為二進位制資料傳送,然後接收時直接還原為物件。具體過程是,將要傳送的資料放在乙個

hashtable

中,序列化後傳送出去,在接收方接收到資料並還原為

hashtable

,根據預先約定好的

key和獲取自己關心的資料。在這種情況下,定義通訊協議的內容實質上也就只是指定一組

key就行了。再也不用做那些規定第幾個欄位是什麼型別有多長的煩躁的事情了。

可能很多人很善於用

xmlxml

有不可比擬的好處,因為它是同平台無關的,而且基本上任何開發語言都有現成庫來解析

xml。這個和我的觀點並不衝突。物件序列化並不侷限於二進位制資料。

c#裡有豐富的方法,可以將物件序列化為

xml文件,也支援用

soap

協議來序列化資料。所以只要用公共的序列化標準來序列化物件,也可以達到跨平台、跨語言的目的。其實現在流行的

web service

其核心技術也就大概是這樣吧。

原理說完了,貼段**做個例子。

objecttransferclient

(簡稱otc

)是乙個利用

udp協議及二進位制物件序列化的包括物件傳送和接收的庫。呼叫方法很簡單,用

send

傳送物件,響應

receiveobject

事件來處理接收的物件。至於具體細節就不多敘述了,相信有一定

c#基礎的人能輕鬆看懂的。

這一原理的應用潛力是巨大的,我在這裡拋磚引玉,還請指教。

using system;

using system.***.sockets;

using system.***;

using system.runtime.serialization.formatters.binary;

using system.threading;

namespace otc

///

/// 指定埠號構建乙個物件傳送器。

///

/// 埠號

public objecttransferclient(int port)

///

/// 初始化傳送器並開始工作

///

public void start()}

///

/// 使用指定的主機名和埠連線預設的遠端主機

///

/// 主機名

/// 埠

public void connect(string hostname, int port)

///

/// 使用指定的ip位址和埠連線預設的遠端主機

///

/// ip位址

/// 埠

public void connect(ipaddress ipaddress, int port)

///

/// 使用網路終結點連線預設的遠端主機

///

/// 網路端點

public void connect(ipendpoint iep)

private byte createargpackage(object obj)

///

/// 將物件傳送到預設主機。呼叫此方法前必須先呼叫connect方法連線預設主機。

///

/// 要傳送的物件

public void send(object obj)

else}

///

/// 將物件傳送到指定的主機。若呼叫了connect方法連線了預設主機,則此方法不可用。

///

/// 要傳送的物件

/// 目標主機的網路端點

public void send(object obj, ipendpoint remoteiep)

else}

///

/// 監聽接收資料執行緒方法

///

protected void listen()

}catch}}

#region 公共屬性區

///

/// 返回或設定接收物件的埠號

///

public int port

set}

///

/// 返回物件傳送器是否已經初始化並開始工作

///

public bool isstart}

///

/// 返回物件傳送器是否已經連線預設遠端主機

///

public bool isconnected}

#endregion

#region idisposable 成員

public void dispose()

#endregion

}///

/// 接收物件事件引數

///

[serializable]

public class receiveobjecteventargs : eventargs

///

/// 構建乙個空的接收物件事件引數

///

public receiveobjecteventargs():this(null, null)

///

/// 接收到的物件

///

public object obj

}///

/// 傳送方的網路端點

///

public system.***.ipendpoint remoteiep

set}

}///

/// 接收物件事件的委託

///

public delegate void receiveobjecteventhandler(object sender, receiveobjecteventargs e);

}

網路通訊協議

網路協議是構成網路的基本元件之一,協議是若干規則和協定的組合,一般指機器1的第n 層與機器2的第 n層的對話,這種對話中所使用的若干規則和約束便稱為第 n層網路協議。tcp ip 網路體系結構模型就是遵循 tcp ip 協議進行通訊的一種分層體系,現今,internet 和intranet 所使用的...

網路通訊協議

通過計算機網路可以使多台計算機實現連線,位於同乙個網路中的計算機在進行連線和通訊時需要遵守一定的規則,這就好比在道路中行駛的汽車一定要遵守交通規則一樣。在計算機網路中,這些連線和通訊的規則被稱為網路通訊協議,它對資料的傳輸格式 傳輸速率 傳輸步驟等做了統一規定,通訊雙方必須同時遵守才能完成資料交換。...

網路通訊協議

一 osi模型 名稱 層次 功能 物理層 1 實現計算機系統與網路間的物理連線 資料鏈路層 2 進行資料打包與解包,形成資訊幀 網路層 3 提供資料通過的路由 傳輸層 4 提供傳輸順序資訊與響應 會話層 5 建立和中止連線 表示層 6 資料轉換 確認資料格式 應用層 7 提供使用者程式介面 二 協議...