欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言 

網(wǎng)絡(luò)通信共享庫(kù)NetShare用于保證客戶端與服務(wù)器通信數(shù)據(jù)包的規(guī)范和統(tǒng)一,客戶端與服務(wù)器共同使用本庫(kù),提升數(shù)據(jù)包序列化和反序列化的準(zhǔn)確性和安全性,并且用于滿足不同的通信數(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>
        /// 當(dāng)前數(shù)據(jù)發(fā)送端的IPEndPoint字符串內(nèi)容(ip地址:端口號(hào))
        /// </summary>
        [DataMember]
        public string mLocalEndPointStr;

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

        /// <summary>
        /// 將當(dāng)前數(shù)據(jù)包實(shí)例轉(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ù)包)對(duì)象
        /// </summary>
        /// <param name="bytes">指定的字節(jié)數(shù)組</param>
        /// <param name="type">DataPacket派生類類型</param>
        /// <returns>DataPacket(數(shù)據(jù)包)對(duì)象或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ù)包)對(duì)象
        /// </summary>
        /// <typeparam name="T">DataPacket派生類類型</typeparam>
        /// <param name="bytes">指定的字節(jié)數(shù)組</param>
        /// <returns>DataPacket派生類(數(shù)據(jù)包)對(duì)象或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>
        /// 當(dāng)前客戶端的名稱
        /// </summary>
        [DataMember]
        public string mClientName;

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

        /// <summary>
        /// 將客戶端數(shù)據(jù)包實(shí)例轉(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ù)包實(shí)例轉(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>
        /// 目標(biāo)客戶端的名稱
        /// </summary>
        [DataMember]
        public string mDestinationClientName;

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

        /// <summary>
        /// 將私聊頻道客戶端數(shù)據(jù)包實(shí)例轉(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ù)器進(jìn)行連接的客戶端名稱合集
        /// </summary>
        [DataMember]
        public string[] mClientNames;

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

        /// <summary>
        /// 將私聊頻道服務(wù)端數(shù)據(jù)包實(shí)例轉(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#實(shí)現(xiàn)網(wǎng)絡(luò)通信共享庫(kù)NetShare的使用示例的文章就介紹到這了,更多相關(guān)C# 網(wǎng)絡(luò)共享NetShare內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論