Unity 与 .net core 服务器(C#) Socket通信

前言

本来按着前面是想用nodejs来做游戏服务器的,但是后面查资料,看着看着,好像发现一个新东西.net core。似乎nodejs对帧同步这种要求服务器运算量较大的,不算很好(但是可以nodejs + c++),而且既然.net core是最新的技术,那就与时俱进的研究看看。(目前对服务器不太了解,对.net core也不了解,自己找的资料也不多,有错误请大神指点一二),本文还是从与unity的socket通信入手,效果图如下:



资料

.net core 官网:https://dotnet.github.io/

socket连接资料:https://blog.youkuaiyun.com/linshuhe1/article/details/51386559


服务器

首先,我们根据官网的下载并安装好.net core(官网说的很详细,这里就不累赘了)。然后我们打开vs新建一个.net core控制台应用,用来做我们的服务器(vs要事先安装好.net core相关库)



封装字节流(byte[])操作类

在网络通讯中,数据在网络传输的格式必须以字节流的形式进行,因此需要我们对字节流进行写入和读出的操作,下面将会封装两个类,用来将各种类型的数据写入字节流,和从字节流中读取各种类型的数据。如下

读取类:NetBufferReader

using System;
using System.IO;
using System.Text;

namespace Tool {
    class NetBufferReader {

        MemoryStream m_stream = null;
        BinaryReader m_reader = null;

        ushort m_dataLength;

        public NetBufferReader(byte[] data) {
            if(data != null) {
                m_stream = new MemoryStream(data);
                m_reader = new BinaryReader(m_stream);

                m_dataLength = ReadUShort();
            }
        }

        public byte ReadByte() {
            return m_reader.ReadByte();
        }

        public int ReadInt() {
            return m_reader.ReadInt32();
        }

        public uint ReadUInt() {
            return m_reader.ReadUInt32();
        }

        public short ReadShort() {
            return m_reader.ReadInt16();
        }

        public ushort ReadUShort() {
            return m_reader.ReadUInt16();
        }

        public long ReadLong() {
            return m_reader.ReadInt64();
        }

        public ulong ReadULong() {
            return m_reader.ReadUInt64();
        }

        public float ReadFloat() {
            byte[] temp = BitConverter.GetBytes(m_reader.ReadSingle());
            Array.Reverse(temp);
            return BitConverter.ToSingle(temp, 0);
        }

        public double ReadDouble() {
            byte[] temp = BitConverter.GetBytes(m_reader.ReadDouble());
            Array.Reverse(temp);
            return BitConverter.ToDouble(temp, 0);
        }

        public string ReadString() {
            ushort len = ReadUShort();
            byte[] buffer = new byte[len];
            buffer = m_reader.ReadBytes(len);
            return Encoding.UTF8.GetString(buffer);
        }

        public byte[] ReadBytes() {
            int len = ReadInt();
            return m_reader.ReadBytes(len);
        }

        public void Close() {
            if(m_reader != null) {
                m_reader.Close();
     
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值