最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)網(wǎng)絡(luò)通信共享庫NetShare的使用示例

 更新時間:2023年11月22日 10:43:03   作者:我與歲月的森林  
本文主要介紹了C#實現(xiàn)網(wǎng)絡(luò)通信共享庫NetShare,網(wǎng)絡(luò)通信共享庫NetShare用于保證客戶端與服務(wù)器通信數(shù)據(jù)包的規(guī)范和統(tǒng)一,感興趣的可以了解一下

前言 

網(wǎng)絡(luò)通信共享庫NetShare用于保證客戶端與服務(wù)器通信數(shù)據(jù)包的規(guī)范和統(tǒng)一,客戶端與服務(wù)器共同使用本庫,提升數(shù)據(jù)包序列化和反序列化的準確性和安全性,并且用于滿足不同的通信數(shù)據(jù)需求。

NetShare:DataPacket(通用數(shù)據(jù)包)

using System;
using System.IO;
using System.Runtime.Serialization;

namespace NetShare
{
    /// <summary>
    /// 通用數(shù)據(jù)包
    /// </summary>
    [KnownType(typeof(PCDataPacket)), KnownType(typeof(PSDataPacket)), KnownType(typeof(ServerDataPacket))]
    [DataContract]
    public class DataPacket
    {
        /// <summary>
        /// 當前數(shù)據(jù)發(fā)送端的IPEndPoint字符串內(nèi)容(ip地址:端口號)
        /// </summary>
        [DataMember]
        public string mLocalEndPointStr;

        /// <summary>
        /// 當前數(shù)據(jù)發(fā)送端發(fā)送的其它內(nèi)容
        /// </summary>
        [DataMember]
        public string mContent;

        /// <summary>
        /// 將當前數(shù)據(jù)包實例轉(zhuǎn)換為字節(jié)數(shù)組
        /// </summary>
        /// <returns>字節(jié)數(shù)組</returns>
        public virtual byte[] ToBytes()
        {
            return Array.Empty<byte>();
        }

        /// <summary>
        /// 將指定的字節(jié)數(shù)組轉(zhuǎn)換為DataPacket(數(shù)據(jù)包)對象
        /// </summary>
        /// <param name="bytes">指定的字節(jié)數(shù)組</param>
        /// <param name="type">DataPacket派生類類型</param>
        /// <returns>DataPacket(數(shù)據(jù)包)對象或null</returns>
        public static DataPacket ToObject(byte[] bytes, Type type)
        {
            if (bytes?.Length > 0 && type != null && type.IsAssignableFrom(typeof(DataPacket)))
            {
                using (MemoryStream ms = new MemoryStream(bytes))
                {
                    DataContractSerializer serializer = new DataContractSerializer(type);
                    object obj = serializer.ReadObject(ms);
                    if (obj != null && obj.GetType().Equals(type)) return (DataPacket)obj;
                };
            }
            return null;
        }

        /// <summary>
        /// 將指定的字節(jié)數(shù)組轉(zhuǎn)換為DataPacket派生類(數(shù)據(jù)包)對象
        /// </summary>
        /// <typeparam name="T">DataPacket派生類類型</typeparam>
        /// <param name="bytes">指定的字節(jié)數(shù)組</param>
        /// <returns>DataPacket派生類(數(shù)據(jù)包)對象或null</returns>
        public static T ToObject<T>(byte[] bytes) where T : DataPacket
        {
            if (bytes?.Length > 0)
            {
                using (MemoryStream ms = new MemoryStream(bytes))
                {
                    DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                    object obj = serializer.ReadObject(ms);
                    if (obj != null && obj is T t) return t;
                };
            }
            return null;
        }
    }
}

NetShare:ClientDataPacket(客戶端數(shù)據(jù)包)

using System.Runtime.Serialization;
using System.IO;

namespace NetShare
{
    /// <summary>
    /// 客戶端數(shù)據(jù)包
    /// </summary>
    [DataContract]
    public class ClientDataPacket : DataPacket
    {
        /// <summary>
        /// 當前客戶端的名稱
        /// </summary>
        [DataMember]
        public string mClientName;

        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        public ClientDataPacket()
        {
            mLocalEndPointStr = string.Empty;
            mContent = string.Empty;
            mClientName = string.Empty;
        }

        /// <summary>
        /// 將客戶端數(shù)據(jù)包實例轉(zhuǎn)換為字節(jié)數(shù)組
        /// </summary>
        /// <returns>字節(jié)數(shù)組</returns>
        public override byte[] ToBytes()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(ClientDataPacket));
                serializer.WriteObject(ms, this);
                return ms.ToArray();
            }
        }

        /// <summary>
        /// 客戶端數(shù)據(jù)包的字符串內(nèi)容
        /// </summary>
        /// <returns>字符串內(nèi)容</returns>
        public override string ToString()
        {
            return $"[LocalEndPointStr:{mLocalEndPointStr},ClientName:{mClientName},Content:{mContent}]";
        }
    }
}

NetShare:ServerDataPacket(服務(wù)器數(shù)據(jù)包)

using System.IO;
using System.Runtime.Serialization;

namespace NetShare
{
    /// <summary>
    /// 服務(wù)端數(shù)據(jù)包
    /// </summary>
    [DataContract]
    public class ServerDataPacket : DataPacket
    {
        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        public ServerDataPacket()
        {
            mLocalEndPointStr = string.Empty;
            mContent = string.Empty;
        }

        /// <summary>
        /// 將服務(wù)端數(shù)據(jù)包實例轉(zhuǎn)換為字節(jié)數(shù)組
        /// </summary>
        /// <returns>字節(jié)數(shù)組</returns>
        public override byte[] ToBytes()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(ServerDataPacket));
                serializer.WriteObject(ms, this);
                return ms.ToArray();
            }
        }

        /// <summary>
        /// 服務(wù)端數(shù)據(jù)包的字符串內(nèi)容
        /// </summary>
        /// <returns>字符串內(nèi)容</returns>
        public override string ToString()
        {
            return $"[LocalEndPointStr:{mLocalEndPointStr},Content:{mContent}]";
        }
    }
}

NetShare:PCDataPacket(私聊頻道客戶端數(shù)據(jù)包)

using System.IO;
using System.Runtime.Serialization;

namespace NetShare
{
    /// <summary>
    /// 私聊頻道客戶端數(shù)據(jù)包
    /// </summary>
    [DataContract]
    public class PCDataPacket : ClientDataPacket
    {
        /// <summary>
        /// 目標客戶端的名稱
        /// </summary>
        [DataMember]
        public string mDestinationClientName;

        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        public PCDataPacket()
        {
            mDestinationClientName = string.Empty;
        }

        /// <summary>
        /// 將私聊頻道客戶端數(shù)據(jù)包實例轉(zhuǎn)換為字節(jié)數(shù)組
        /// </summary>
        /// <returns>字節(jié)數(shù)組</returns>
        public override byte[] ToBytes()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(PCDataPacket));
                serializer.WriteObject(ms, this);
                return ms.ToArray();
            }
        }
    }
}

NetShare:PSDataPacket(私聊頻道服務(wù)器數(shù)據(jù)包)

using System;
using System.IO;
using System.Runtime.Serialization;

namespace NetShare
{
    /// <summary>
    /// 私聊頻道服務(wù)端數(shù)據(jù)包
    /// </summary>
    [DataContract]
    public class PSDataPacket : ServerDataPacket
    {
        /// <summary>
        /// 已與服務(wù)器進行連接的客戶端名稱合集
        /// </summary>
        [DataMember]
        public string[] mClientNames;

        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        public PSDataPacket()
        {
            mClientNames = Array.Empty<string>();
        }

        /// <summary>
        /// 將私聊頻道服務(wù)端數(shù)據(jù)包實例轉(zhuǎn)換為字節(jié)數(shù)組
        /// </summary>
        /// <returns>字節(jié)數(shù)組</returns>
        public override byte[] ToBytes()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(PSDataPacket));
                serializer.WriteObject(ms, this);
                return ms.ToArray();
            }
        }
    }
}

到此這篇關(guān)于C#實現(xiàn)網(wǎng)絡(luò)通信共享庫NetShare的使用示例的文章就介紹到這了,更多相關(guān)C# 網(wǎng)絡(luò)共享NetShare內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • C#中的數(shù)組用法詳解

    C#中的數(shù)組用法詳解

    本文詳細講解了C#中的數(shù)組用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 12306奇葩驗證碼引發(fā)思考之C#實現(xiàn)驗證碼程序

    12306奇葩驗證碼引發(fā)思考之C#實現(xiàn)驗證碼程序

    春運最高峰來了!明天通過網(wǎng)絡(luò)將能買到小年夜的車票,本周四就將開售除夕日車票,但不少人被首次在春運期間使用的圖片驗證碼搞得很火大,小編也正在對驗證碼進行研究,編寫了由C#實現(xiàn)驗證碼程序,分享給大家
    2015-12-12
  • c# 空合并運算符“??”的使用詳解

    c# 空合并運算符“??”的使用詳解

    本篇文章是對c#中空合并運算符“??”的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Directory文件類的實例講解

    Directory文件類的實例講解

    下面小編就為大家分享一篇Directory文件類的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • C#重啟遠程計算機的代碼

    C#重啟遠程計算機的代碼

    C#重啟遠程計算機的代碼...
    2007-04-04
  • C# 使用Microsoft Edge WebView2的相關(guān)總結(jié)

    C# 使用Microsoft Edge WebView2的相關(guān)總結(jié)

    這篇文章主要介紹了C# 使用Microsoft Edge WebView2的相關(guān)總結(jié),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#實現(xiàn)圖片切割、切圖、裁剪

    C#實現(xiàn)圖片切割、切圖、裁剪

    這篇文章主要為大家詳細介紹了C#實現(xiàn)圖片切割、切圖、裁剪,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • c#序列化詳解示例

    c#序列化詳解示例

    序列化是將對象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^程。與序列化相對的是反序列化,它將流轉(zhuǎn)換為對象。這兩個過程結(jié)合起來,可以輕松地存儲和傳輸數(shù)據(jù)
    2014-02-02
  • C#變量命名規(guī)則小結(jié)

    C#變量命名規(guī)則小結(jié)

    本文主要介紹了C#變量命名規(guī)則小結(jié),文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#中4種深拷貝方法介紹

    C#中4種深拷貝方法介紹

    這篇文章主要介紹了C#中4種深拷貝方法介紹,本文講解了利用反射實現(xiàn)、利用xml序列化和反序列化實現(xiàn)、利用二進制序列化和反序列化實現(xiàn)、利用silverlight DataContractSerializer實現(xiàn),用于在silverlight 客戶端使用等4種方法,需要的朋友可以參考下
    2015-06-06

最新評論

页游| 富源县| 咸阳市| 长葛市| 刚察县| 准格尔旗| 崇明县| 常德市| 沈丘县| 济宁市| 彰化市| 凤山县| 武川县| 美姑县| 惠安县| 娱乐| 玉溪市| 张北县| 昌宁县| 伊金霍洛旗| 丽江市| 靖宇县| 永泰县| 康平县| 日喀则市| 瑞安市| 永康市| 蒙自县| 视频| 崇州市| 东至县| 朝阳市| 自贡市| 鹿泉市| 屯昌县| 且末县| 东乌珠穆沁旗| 固阳县| 含山县| 德兴市| 育儿|