写点什么

从零开始写游戏服务器①:前期了解

用户头像
Integer
关注
发布于: 2021 年 04 月 08 日

锵锵~最近看到了 bit 哥开的新坑:Python 游戏开发,灵机一动想到了新系列要写什么——就是这个系列啦!从这一篇开始,我们将逐渐学习搭建一个基于 C 语言开发的游戏服务器(最终目标当然是和 Bit 哥的游戏客户端挂钩咯)。

搭建环境

关于环境,我们选择的目标服务器是 Ubuntu20.04,有其他系统的小伙伴一定要注意系统差距哦~既然是要开发游戏服务器,那么我们首先一定要有一台服务器。这里指的服务器是那种长期运行的计算机——当然,你手上的本本不是不可以运行 Server 程序,但是你是做不到 24 小时开机和稳定的 IP 的。如果是像我一样购置了云服务器的朋友们可以略过下面这段恰饭时间:如果受限于以上两点,但又想把自己写的服务器开出去和小伙伴们玩的,可以选择在我这里寻求服务器托管功能(微信号 zzkklep),只收一点点的算力费用哦。

开始开发

网络通信

既然说要开发服务器,那么我们首先要学习的就是网络通信相关的知识——毕竟,如果不能在网上通信还叫哪门子的服务器呢?C 语言中视采用系统的不同有不同的网络通信模块,我们着重讲解 Linux 下的网络通信。在网络上,我们通常采用的是 TCP 或 UDP 协议进行通信(也被称为传输层协议),在传输层协议的基础上,前人定义了一套名为 Socket 的工具供我们方便快捷的进行网络连接。

Socket

Socket,中文叫法是套接字,它是一个抽象的概念,一个 Socket 代表着一次网络通信中的某一端,Socket 是应用和操作系统之间交互的接口,系统通过套接字将封装的网卡功能提供给应用程序使用。在 LinuxC 编程中,Socket 的主体功能分散在多个库中,我们可以编写头文件如下


//SocketDefine.h#ifndef SOCKETDEFINE_HEADFILE#define SOCKETDEFINE_HEADFILE
#include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h>
#endif
复制代码


这里留给读者一个练习题,考虑如下代码


#ifndef SOCKETDEFINE_HEADFILE#define SOCKETDEFINE_HEADFILE
....... //其余代码
#endif
复制代码


会起到什么功能呢?

Socket 入门

在正式开始写代码之前请允许我推荐一篇帖子,这里面记载了大部分的 Socket 常用函数。链接:C 语言常用 Socket 函数速查然后让我们来了解一下获取一个用于通信的 Socket 具体要怎么做。一般来说,声明一个

Socket 服务器需要经过如下步骤

TCP:socket()->bind()->listen()->accept()

UDP:socket()->bind()

而声明一个 Socket 客户端则要经过如下步骤

TCP:socket()->bind()->connect()

UDP:socket()->bind()

可以看到,TCP 在各种意义上相较 UDP 都要更复杂一些,不过不必担心,我们接下来会好好讲讲两者的不同之处。

Socket 熟练

TCP 和 UDP 最大的不同在于 UDP 获取的数据会直接从端口上取到,而 TCP 则会在 accept()之后返回一个新的 Socket 供君使用,除此之外使用 I/O 进行交互的部分是一致的(具体参见上面那篇文章)。在 Socket 使用完毕打算关闭时,不论你是 TCP 还是 UDP,请一定不要忘记释放你从 socket()函数或是 accept()那里得来的 Socket(我们一般称这个为 Socket 描述符),具体的办法是使用 close()函数进行操作。

今日作业

思考上面的宏定义的作用,并尝试自己写一个类似的。阅读 Socket 函数集。

源码下载

本系列提及的源码全部可以在http://www.xeler.top/code/进行下载,如果网站不能访问也可以加我的微信号 zzkklep 获取

发布于: 2021 年 04 月 08 日阅读数: 26
用户头像

Integer

关注

生年不满百,何怀千岁忧 2021.03.30 加入

C/C++工程师,专门研究犄角旮旯里的DeadTechnology

评论

发布
暂无评论
从零开始写游戏服务器①:前期了解