《丛林战争》是一款完整的网络游戏案例,运用U3D开发客户端,Socket开发服务端,其中涉及到了网络编程、数据库和Unity的功能实现,之前通过U3D开发了一个单机游戏《黑暗之光》,并没有涉及网络编程的知识,通过《丛林战争》这个完整的游戏,系统性地学习网络编程,并进一步学习利用U3D开发游戏。
本篇内容是网络编程的基础知识,主要内容如下:
- 介绍TCP/IP的基本概念以及基础TCP协议
- 实现服务器端与客户端的同步收发
- 实现服务器端与客户端的异步收发
1. TCP/IP基本概念
下图是一个网络的简化图,可以看出IP的作用是在复杂的网络环境中将数据包发给最终的目标地址,本节主要介绍IP、端口号和TCP协议。
1.1 IP
IP分为局域网IP和公网IP,每台机都有这两个IP。当一个路由器连接多个主机,相当于路由器与这些主机组成了一个局域网,路由器会给每个主机分配一个局域网IP,可以在Win+R > cmd,小黑窗中输入ipconfig查到,公网IP则可以通过百度查询到。
1.2 端口号
主机之间通过路由器进行通信,以主机B与主机D通信为例,B通过ip地址找到了主机D,连接建立之后,考虑到进行通信最终是软件之间的交互,因此需要搞清是与什么软件进行通信。假设D中有QQ、微信、绝地求生等软件,需要为每个软件分配一个端口号。(即ip找机器,端口号找软件)
下图就是一个例子,IP数据172.23.12.14找到了主机A,A中各个端口号对应不同应用(图中以服务端为例),需要通过独有的端口号找到对应软件。后期也会学习如何向系统申请端口号。
一般知名端口号在0~1023之间,而我们经常使用的自定义/动态分配的端口号则一般在1024~65535之间。详细参考百度百科。https://baike.baidu.com/item/%E7%AB%AF%E5%8F%A3%E5%8F%B7/10883658
1.3 TCP协议(三次握手与四次挥手)
三次握手与四次挥手的详解可以参照该博客: