Unity之Socket[0]

来源:互联网 发布:永安医疗软件 编辑:程序博客网 时间:2024/05/16 07:17

第一章节 >> 磨刀不误砍柴工


主要参考链接:
1.http://www.manew.com/thread-102109-1-1.html Unity3d基于Socket通讯例子(第一个看的例子)
2.http://blog.csdn.net/linshuhe1/article/details/51386559 Unity3D —— Socket通信(C#) (这个特别详细)
3.https://www.cnblogs.com/wangcq/p/3520400.html Socket通信原理(想掌握socket,强烈建议看看)


入门的时候,觉得网络通信这块超级难,特别抽象,以至于没有一个具体概念。虽然现在有Unity内置的工具NetworkManager和经典的WWW(加载外部文件和网络请求),但是通信这块,主流还是Socket编程。


一、127.0.0.1
本地机回送地址(Loopback Address),即主机IP堆栈内部的IP地址。主要用于网络软件测试以及本地进程间的通信。无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。(引用自百度百科: https://baike.baidu.com/item/127.0.0.1/4563698);

二、while(true)
看起来是一个死循环,不过Socket里面有一个叫AcceptTcpClient或者类似的阻塞方法。服务端一直要等到客户端的请求以后才进行下一次的接收。(引用出处:http://blog.csdn.net/lj34207310/article/details/50634316 unity3D中使用Socket进行数据通信(一)
这里写图片描述

三、C#的流
继承自Stream(位于mscorlib.dll程序集),常见的有如下几种:
(引用出处:https://www.cnblogs.com/rainbow70626/p/5077535.html C#流概述)
①FileStream:文件I/O流,C#的文件是基于UTF-8(十六位)的,有别于其他大多数语言的Unicode(八位);
②BufferedStream:缓存 I/O流,用来增强性能的中间存储;
③MemoryStream:内存 I/O流,执行I/O速度快;
④NetworkStream:网络 I/O流,用于在网络上传输数据;
⑤CopytoStream:和其他流配合使用,执行加密/解密操作。
(引用出处(百度上的一个问答):
https://zhidao.baidu.com/question/568279471.html?fr=iks&word=BufferedStream+C%23&ie=gbk )


安利一下:MSDN,你值得拥有!
这是C#流的整体介绍:https://msdn.microsoft.com/zh-cn/library/system.io.stream Stream 类


——————————————————————————————
好了,今天先写到这,下班。还会继续更…希望与看到的小伙伴共勉~
——————————————————————————————


go on~2017年12月5日10:50:54

四、UDP & TCP 的区别
(引用自: http://blog.sina.com.cn/s/blog_493309600100clrw.html TCP与UDP区别)
UDP——面向数据,不可靠,传输快
TCP——面向连接,可靠

UDP:User Datagram Protocol,用户数据报协议。不会被用来传输重要的数据,通常在播报视频和音频,或者对传输速度有需求的情况下使用。之所以UDP比TCP传输快,是因为UDP不会对传输进行控制和校验,在传输数据报前不用在客户端和服务端之间建立连接,且没有超时重发机制。需要牢记的一件事:UDP只考虑速度!

TCP:Transmission Control Protocol,传输控制协议。网络传输最常用的手段。当客户端咳服务端彼此交换数据前,必须经过三次握手建立一个TCP连接,然后才能传递数据。TCP提供超时重发,丢弃重复数据,数据校验,流量控制等机制,有效地保证了数据能从一段传到另一端。

这里写图片描述
这里写图片描述


五、三次握手的相关名词
· seq(Sequence Number,序列号)——连接以后传送数据用
· ack(Acknowledgement Number,确认序列号)——确认包,值是所接收数据包的序列号(注:引用http://blog.csdn.net/u012632570/article/details/50673793里Acknowledgment少写一个e)
· SYN (Synchronous,同步信号)
· ACK (Acknowledgement,应答信号)——当ACK = 1时,表示ack字段有意义

TCP三次握手
这里写图片描述

TCP四次挥手
这里写图片描述
总结就是:用生成的序列号来保持同步,序列号+1为应答(反馈)信号。


六、什么是Socket?
Socket(套接字),是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
(引用自:http://blog.csdn.net/chengyingzhilian/article/details/7633640 如何保证socket长连接)
这里写图片描述
这里写图片描述


七、多线程与线程锁

  • 进程与线程

    –进程(Process)是Windows系统中的一个基本概念,它包含运行一个程序所需要的资源。进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式),一个进程的崩溃不会影响其他进程的运行。
    –线程(Thread,在System.Threading命名空间下)是进程中的基本单元,进程入口执行的第一个线程被系统标记为这个进程的主线程。在.NET的应用程序中,都是以Main()方法为进程入口。线程主要是由CPU寄存器、调用栈和线程本地存储器(Thread Local Storage,TLS)组成。CPU寄存器记录当前所执行线程的状态,调用栈主要用于维护线程所调用到的内存与数据,TLS主要用于存放线程的状态信息。

  • 多线程
    –在单CPU系统的一个单位时间(time slice)内,CPU只能运行单个线程,运行顺序取决于线程的优先级别。如果在单位时间内线程未能完成执行,系统就会把线程的状态信息保存到线程的本地存储器(TLS)中,为线程的再次执行做准备。多线程只是系统带来的一个假象,它在多个时间内进行多个线程的切换,因为切换频繁且耗时非常短,所以多线程可被认为是并发运行。
    (https://www.cnblogs.com/leslies2/archive/2012/02/07/2310495.html 风尘浪子:C#综合揭秘——细说多线程(上))

  • 多线程的意义(开辟多个线程可以考虑用线程池)
    –将代码与其他代码隔离,提高程序的可靠性;
    –简化编码;
    –并发执行。
    (https://www.cnblogs.com/luxiaoxun/p/3280146.html C#多线程编程 )

  • 线程锁

–在多线程编辑中,可能会有许多线程并发的执行一个代码块,以提高执行效率。如果我们希望这个代码块在同一时刻只被调用一次,就需要用到线程锁(Lock)。lock关键字可以用来确保代码块完整执行,而不会被其他线程中断。它可以把一段代码定义为互斥段,在一个时刻只允许一个线程进入执行,其余线程必须等待。
(http://blog.csdn.net/smooth_tailor/article/details/52411359 C# 关于线程锁lock的使用方法)
(读写锁ReaderWriterLock,参考http://blog.csdn.net/gjinlin/article/details/18861831 C# 读写锁)

原创粉丝点击