Unity-网络开发(三)

大小端模式 什么是大小端模式 大端模式 是指数据的高字节保存在内存的低地址中 而数据的低字节保存在内存的高地址中 这样的存储模式有点儿类似于把数据当作字符串顺序处理 地址由小向大增加,数据从高位往低位放 符合人类的阅读习惯 小端模式 是指数据的高字节保存在内存的高地址中 而数据的低字节保存在内存的低地址中 举例说明 十六进制数据0x11223344 大端模式存储 11 22 33 44 0 1 2 3 低地址——>高地址 小端模式存储 44 33 22 11 0 1 2 3 低地址——>高地址 为什么有大小端模式 大小端模式其实是计算机硬件的两种存储数据的方式 我们也可以称大小端模式为 大小端字节序 对于我们来说,大端字节序阅读起来更加方便,为什么还要有小端字节序呢? 原因是,计算机电路先处理低位字节,效率比较高 计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节 它只知道按顺序读取字节,先读第一个字节,再读第二个字节 如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节 小端字节序正好相反 因为计算机都是从低位开始的 所以,计算机的内部处理都是小端字节序 但是,我们人类的读写习惯还是大端字节序 所以,除了计算机的内部处理 其它场合几乎都是大端字节序,比如网络传输和文件存储 一般情况下,操作系统都是小端模式,而通讯协议都是大端模式 但是具体的模式,还是要根据硬件平台,开发语言来决定 主机不同,开发语言不同 可能采用的大小端模式也会不一致 大小端模式对于我们的影响 只有读取的时候,才必须区分大小端字节序,其它情况都不用考虑 因此对于我们来说,在网络传输当中我们传输的是字节数组 那么我们在收到字节数组进行解析时,就需要考虑大小端的问题 虽然TCP/IP协议规定了在网络上必须采用网络字节顺序(大端模式) 但是具体传输时采用哪种模式,都是根据前后端语言、设备决定的 在进行网络通讯时,前后端语言不同时,可能会造成大小端不统一 一般情况下 C# 和 Java/Erlang/AS3 通讯需要进行大小端转换 因为C#是小端模式 Java/Erlang/AS3是大端模式 C# 与 C++通信不需要特殊处理 他们都是小端模式 大小端转换 判断是大小端哪种模式 print(“是否是小端模式:” + BitConverter.IsLittleEndian); ...

August 14, 2022 · 3 min · LiuYingbo

Unity-网络开发(一)

网络基本概念 网络 网络的作用 在没有网络之前,每个人的设备(电脑等)都是彼此孤立的,网络的出现让设备之间可以相互通信 网络是由若干设备和连接这些设备的链路构成,各种设备 间接或者直接通过介质相连 设备之间想要进行信息传递时,将想要传递的数据编码为2进制数值便可以被有效的传输。这些数据是以电脉冲的形式进行传输的 线缆中的电压是在高低状态之间进行变化的,因而 二进制中1是通过产生一个正电压来传输的,二进制中0是通过产生一个负电压来传输的 局域网 局域网(Local Area Network,简称LAN) 是按照范围划分而来的名称,是指在某一个小区域内由多台设备互联成的计算机组,可以是家里的两台设备组成 也可以是学校、公司里的上千台设备组成,特点是分布地区范围有限,覆盖范围一般是方圆几千米之内 以太网 以太网是一种计算机局域网技术,是目前应用最普遍的局域网技术 IEEE组织(电气与电子工程师协会)的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问层协议的内容 说人话: 局域网中设备的连接规范,数据的传输规范等等规则,都是基于以太网的技术标准来完成的 所以,简单理解以太网就是网络连接的一种规则(协议) 以太网 网络拓扑结构 概念: 用传输媒体把计算机等各种设备互相连接起来的物理布局,是指设备互连过程中构成的几何形状 局域网 城域网(Metropolitan Area Network,简称MAN) 是在一个城市范围内所建立的网络通常覆盖一个城市,从几十公里到一百公里不等,可能会有多种介质用户的数量也比局域网更多 广域网 广域网(Wide Area Network,简称WAN) 又称外网、公网,是连接不同地区局域网或城域网设备通信的远程网,通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,形成国际性的远程网络 注意:广域网并不等同于互联网 互联网(因特网) 互联网,如果作为名词理解的话,就是互相联网,让各种设备处于同一网络环境下,只要设备互相连接网络了,那么设备之间就可以进行通信 它一般泛指彼此能够通信的设备组成的网络,但是目前我们往往提到的互联网,大部分时候都是指代的因特网,你可以把互联网作为名词理解,也可以将互联网理解为因特网的代称 互联网(internet,音译为因特网) 又称国际网络,指的是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议(规则)相连,形成逻辑上的单一巨大国际网络。 互联网目前已经把200多个国家和地区的大部分设备连接了起来,形成了一个遍布全世界的网络。所以在一定程度上也可以说,互联网等同于广域网,广域网包含了互联网。互联网使用的技术,在广域网上一定有,但是某些广域网的技术,互联网上不一定有比如军用的广域网,普通老百姓是不会使用的 互联网(因特网)的本质就是人为定义的一系列协议(规则)总称为“互联网协议” 主要功能: 定义计算机如何接入互联网,以及接入互联网的计算机的通信标准,也就是为我们的设备定义连入标准,并且为传输的2进制数据定义一些传输规则,只要遵守这些规则来进行网络连接和数据传输,我们的各种设备就可以通过网络进行通讯,进行信息的交换 简单理解因特网: 它是国际上最大的互联网,所以当我们提到互联网时一般都代指因特网 它是指当前全球最大的、开放的、有众多网络互相连接而成的特定的计算机网络 它采用TCP/IP协议簇作为通信的规则,提供了包括万维网(WWW)、文件传输(FTP)、电子邮件(E-mail)、远程登录(Telnet)等等服务 只要我们的设备和应用程序遵守这套因特网的互联网规则,那么我们就可以在这个庞大的网络体系当中畅游 万维网 万维网(World Wide Web,简称WWW,也称Web、3W等) 它是存储在因特网的计算机当中,数量巨大的文档(页面)的集合 它是无数个网络站点和网页的集合,是构成因特网的主要部分 我们平时用浏览器看到的内容就属于万维网,他们本质上就是一个个的文档(页面) 如果把因特网看做是网络的基础,那么万维网就可以被看做是对因特网的应用,是利用因特网规则的一种信息传递和呈现的手段,可以认为万维网就是网站和页面的统称 总结 网络:由若干设备和连接这些设备的链路构成,设备间可以相互通信 局域网:指某一个小区域内由多台设备互联成的计算机组 以太网:网络连接的一种规则,定义了连接传输规范 城域网:是在一个城市范围内所建立的网络,几十到一百公里 ...

May 16, 2022 · 3 min · LiuYingbo

Unity-网络开发(二)

网络通信 网络游戏通信方案概述 弱联网和强联网游戏 网络游戏是以C/S模型为基础进行开发的由客户端和服务端组成 弱联网游戏: 这种游戏不会频繁的进行数据通信,客户端和服务端之间每次连接只处理一次请求,服务端处理完客户端的请求后返回数据后就断开连接了 强联网游戏: 这种游戏会频繁的和服务端进行通信,会一直和服务端保持连接状态,不停的和服务器之间交换数据通过之前的知识我们知道,网络游戏是以C/S模型为基础进行开发的由客户端和服务端组成 弱联网游戏代表: 一般的三消类休闲游戏、卡牌游戏等都会是弱联网游戏,这些游戏的核心玩法都由客户端完成,客户端处理完成后只是告诉服务端一个结果,服务端验证结果即可,不需要随时通信 比如:开心消消乐、刀塔传奇、我叫MT等等 强联网游戏代表: 一般的MMORPG(角色扮演)、MOBA(多人在线竞技游戏)、ACT(动作游戏)等等都会是强联网游戏,这些游戏的部分核心逻辑是由服务端进行处理,客户端和服务端之间不停的在同步信息 比如:王者荣耀、守望先锋、和平精英等等 长连接和短连接游戏 长连接和短连接游戏是按照网络游戏通信特点来划分的 弱联网游戏——>短连接游戏 强联网游戏——>长连接游戏 短连接游戏: 需要传输数据时,建立连接,传输数据,获得响应,断开连接 通信特点:需要通信时再连接,通信完毕断开连接 通信方式:HTTP超文本传输协议、HTTPS安全的超文本传输协议(他们本质上是TCP协议) 长连接游戏:不管是否需要传输数据,客户端与服务器一直处于连接状态,除非一端主动断开,或 者出现意外情况(客户端关闭或服务端崩溃等) 通信特点:连接一直建立,可以实时的传输数据 通信方式:TCP传输控制协议 或 UDP用户数据报协议 Socket、HTTP、FTP Socket:网络套接字,是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制 主要用于制作长连接游戏(强联网游戏) Http/Https:(安全的)超文本传输协议,是一个简单的请求-响应协议,它通常运行在TCP协议之上,它指定了客户端可能发送给服务端什么样的信息以及得到什么样的响应。 主要用于制作短连接游戏(弱联网游戏),也可以用来进行资源下载 FTP:文件传输协议,是用于在网络上进行文件传输的一套标准协议,可以利用它来进行网络上资源的下载和上传。它也是基于TCP的传输,是面向连接的,为文件传输提供了可靠的保证 网络通信基础 IP地址和端口类 #region IPAddress类 //命名空间:System.Net; //类名:IPAddress //初始化IP信息的方式 //1.用byte数组进行初始化 byte[] ipAddress = new byte[] { 118, 102, 111, 11 }; IPAddress ip1 = new IPAddress(ipAddress); //2.用long长整型进行初始化 //4字节对应的长整型 一般不建议大家使用 IPAddress ip2 = new IPAddress(0x79666F0B); //3.推荐使用的方式 使用字符串转换 IPAddress ip3 = IPAddress.Parse("118.102.111.11"); //特殊IP地址 //127.0.0.1代表本机地址 //一些静态成员 //获取可用的IPv6地址 //IPAddress.IPv6Any #endregion #region IPEndPoint类 //命名空间:System.Net; //类名:IPEndPoint //IPEndPoint类将网络端点表示为IP地址和端口号,表现为IP地址和端口号的组合 //初始化方式 IPEndPoint ipPoint = new IPEndPoint(0x79666F0B, 8080); IPEndPoint ipPoint2 = new IPEndPoint(IPAddress.Parse("118.102.111.11"), 8080); #endregion #region 总结 //程序表示IP信息 IPAddress ip = IPAddress.Parse("IPv4地址"); //程序表示通信目标 IPEndPoint point = new IPEndPoint(ip, 8080); #endregion 域名解析 域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等,说得简单点就是将好记的域名解析成IP,IP地址是网络上标识站点的数字地址,但是IP地址相对来说记忆困难,所以为了方便记忆,采用域名来代替IP地址标识站点地址。 ...

May 16, 2022 · 11 min · LiuYingbo