SoFunction
Updated on 2025-03-07

Example of using C# to implement the network communication sharing library NetShare

Preface

NetShare, a network communication sharing library, is used to ensure the standardization and unity of data packets between clients and servers. The client and server use this library together to improve the accuracy and security of packet serialization and deserialization, and is used to meet different communication data needs.

NetShare: DataPacket (generic data packet)

using System;
using ;
using ;

namespace NetShare
{
    /// <summary>
    /// General data packet    /// </summary>
    [KnownType(typeof(PCDataPacket)), KnownType(typeof(PSDataPacket)), KnownType(typeof(ServerDataPacket))]
    [DataContract]
    public class DataPacket
    {
        /// <summary>
        /// The IPEndPoint string content of the current data sending end (ip address: port number)        /// </summary>
        [DataMember]
        public string mLocalEndPointStr;

        /// <summary>
        /// Other contents sent by the current data sender        /// </summary>
        [DataMember]
        public string mContent;

        /// <summary>
        /// Convert the current packet instance to a byte array        /// </summary>
        /// <returns>Byte array</returns>        public virtual byte[] ToBytes()
        {
            return &lt;byte&gt;();
        }

        /// &lt;summary&gt;
        /// Convert the specified byte array into a DataPacket object        /// &lt;/summary&gt;
        /// <param name="bytes">Specified byte array</param>        /// <param name="type">DataPacket derived class types</param>        /// <returns>DataPacket object or null</returns>        public static DataPacket ToObject(byte[] bytes, Type type)
        {
            if (bytes?.Length &gt; 0 &amp;&amp; type != null &amp;&amp; (typeof(DataPacket)))
            {
                using (MemoryStream ms = new MemoryStream(bytes))
                {
                    DataContractSerializer serializer = new DataContractSerializer(type);
                    object obj = (ms);
                    if (obj != null &amp;&amp; ().Equals(type)) return (DataPacket)obj;
                };
            }
            return null;
        }

        /// &lt;summary&gt;
        /// Convert the specified byte array into a DataPacket derived class (data package) object        /// &lt;/summary&gt;
        /// <typeparam name="T">DataPacket derived class type</typeparam>        /// <param name="bytes">Specified byte array</param>        /// <returns>DataPacket derived class (packet) object or null</returns>        public static T ToObject&lt;T&gt;(byte[] bytes) where T : DataPacket
        {
            if (bytes?.Length &gt; 0)
            {
                using (MemoryStream ms = new MemoryStream(bytes))
                {
                    DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                    object obj = (ms);
                    if (obj != null &amp;&amp; obj is T t) return t;
                };
            }
            return null;
        }
    }
}

NetShare: ClientDataPacket (client packet)

using ;
using ;

namespace NetShare
{
    /// &lt;summary&gt;
    /// Client data packet    /// &lt;/summary&gt;
    [DataContract]
    public class ClientDataPacket : DataPacket
    {
        /// &lt;summary&gt;
        /// The name of the current client        /// &lt;/summary&gt;
        [DataMember]
        public string mClientName;

        /// &lt;summary&gt;
        /// Constructor        /// &lt;/summary&gt;
        public ClientDataPacket()
        {
            mLocalEndPointStr = ;
            mContent = ;
            mClientName = ;
        }

        /// &lt;summary&gt;
        /// Convert client packet instances to byte arrays        /// &lt;/summary&gt;
        /// <returns>Byte array</returns>        public override byte[] ToBytes()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(ClientDataPacket));
                (ms, this);
                return ();
            }
        }

        /// &lt;summary&gt;
        /// The string content of the client packet        /// &lt;/summary&gt;
        /// <returns>String content</returns>        public override string ToString()
        {
            return $"[LocalEndPointStr:{mLocalEndPointStr},ClientName:{mClientName},Content:{mContent}]";
        }
    }
}

NetShare: ServerDataPacket (server data packet)

using ;
using ;

namespace NetShare
{
    /// &lt;summary&gt;
    /// Server data packet    /// &lt;/summary&gt;
    [DataContract]
    public class ServerDataPacket : DataPacket
    {
        /// &lt;summary&gt;
        /// Constructor        /// &lt;/summary&gt;
        public ServerDataPacket()
        {
            mLocalEndPointStr = ;
            mContent = ;
        }

        /// &lt;summary&gt;
        /// Convert server packet instances into byte arrays        /// &lt;/summary&gt;
        /// <returns>Byte array</returns>        public override byte[] ToBytes()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(ServerDataPacket));
                (ms, this);
                return ();
            }
        }

        /// &lt;summary&gt;
        /// String content of server packet        /// &lt;/summary&gt;
        /// <returns>String content</returns>        public override string ToString()
        {
            return $"[LocalEndPointStr:{mLocalEndPointStr},Content:{mContent}]";
        }
    }
}

NetShare: PCDataPacket (Private Chat Channel Client Data Package)

using ;
using ;

namespace NetShare
{
    /// &lt;summary&gt;
    /// Private chat channel client data package    /// &lt;/summary&gt;
    [DataContract]
    public class PCDataPacket : ClientDataPacket
    {
        /// &lt;summary&gt;
        /// Name of the target client        /// &lt;/summary&gt;
        [DataMember]
        public string mDestinationClientName;

        /// &lt;summary&gt;
        /// Constructor        /// &lt;/summary&gt;
        public PCDataPacket()
        {
            mDestinationClientName = ;
        }

        /// &lt;summary&gt;
        /// Convert private chat channel client packet instance to byte array        /// &lt;/summary&gt;
        /// <returns>Byte array</returns>        public override byte[] ToBytes()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(PCDataPacket));
                (ms, this);
                return ();
            }
        }
    }
}

NetShare: PSDataPacket (Private Chat Channel Server Data Package)

using System;
using ;
using ;

namespace NetShare
{
    /// &lt;summary&gt;
    /// Private chat channel server data packet    /// &lt;/summary&gt;
    [DataContract]
    public class PSDataPacket : ServerDataPacket
    {
        /// &lt;summary&gt;
        /// Collection of client names that have been connected to the server        /// &lt;/summary&gt;
        [DataMember]
        public string[] mClientNames;

        /// &lt;summary&gt;
        /// Constructor        /// &lt;/summary&gt;
        public PSDataPacket()
        {
            mClientNames = &lt;string&gt;();
        }

        /// &lt;summary&gt;
        /// Convert server packet instances of private chat channel into byte array        /// &lt;/summary&gt;
        /// <returns>Byte array</returns>        public override byte[] ToBytes()
        {
            using (MemoryStream ms = new MemoryStream())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(PSDataPacket));
                (ms, this);
                return ();
            }
        }
    }
}

This is the article about the use examples of C#’s network communication sharing library NetShare. For more related C# network sharing content, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!