|
在上篇《Socket開發(fā)探秘--基類及公共類的定義 》中介紹過,所有受到的數(shù)據(jù)包,經(jīng)過系統(tǒng)的預(yù)處理后,都會(huì)得到一個(gè)PreData的數(shù)據(jù)實(shí)體,該實(shí)體包含了協(xié)議頭、協(xié)議內(nèi)容和所屬用戶的ID。PreData是定義了一個(gè)標(biāo)準(zhǔn)的協(xié)議數(shù)據(jù)格式,包含了協(xié)議關(guān)鍵字、協(xié)議內(nèi)容、用戶標(biāo)識(shí)的內(nèi)容。
前面說了,我們數(shù)據(jù)是通過實(shí)體類作為載體的,我們知道,收到的Socket數(shù)據(jù)經(jīng)過粗略的解析后,就是PreData類型的數(shù)據(jù),這個(gè)是通用的數(shù)據(jù)格式,我們需要進(jìn)一步處理才能轉(zhuǎn)化為所能認(rèn)識(shí)的數(shù)據(jù)對(duì)象(實(shí)體類對(duì)象),同樣,我們發(fā)送數(shù)據(jù)的時(shí)候,內(nèi)容部分肯定是按照一定協(xié)議規(guī)則串聯(lián)起來的數(shù)據(jù),那么我們就需要把實(shí)體轉(zhuǎn)化為發(fā)送的數(shù)據(jù)格式。綜上所述,我們通過實(shí)體類,必須實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和讀取的轉(zhuǎn)換。

/// 測試數(shù)據(jù)的實(shí)體類信息
///
public class TestDataRequest
{
#region MyRegion
///
/// 請(qǐng)求序列
///
public string seq;
///
/// 用戶帳號(hào)
///
public string userid;
///
/// 用戶密碼
///
public string psw;
#endregion
public TestDataRequest(string seq, string userid, string psw)
{
this.seq = seq;
this.userid = userid;
this.psw = psw;
}
public TestDataRequest()
{
}
///
/// 轉(zhuǎn)換Socket接收到的信息為對(duì)象信息
///
/// Socket接收到的信息
public TestDataRequest(string data)
{
string[] dataArray = null;
dataArray = NETStringUtil.UnPack(data);
if (dataArray != null && dataArray.Length > 0)
{
TestDataRequest newAnswerData = new TestDataRequest();
int i = 0;
this.seq = dataArray[i++];
this.userid = dataArray[i++];
this.psw = dataArray[i++];
}
}
///
/// 轉(zhuǎn)換對(duì)象為Socket發(fā)送格式的字符串
///
///
public override string ToString()
{
string data = "";
data = this.seq + "|" + this.userid + "|" + this.psw.ToString();
data = NETStringUtil.PackSend(DataTypeKey.TestDataRequest, data);
return data;
}
NET技術(shù):Socket開發(fā)探秘--數(shù)據(jù)封包和拆包,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。