【开源项目分享】使用select、多线程完成的多人联机对战五子棋小游戏(C语言实现)


前言:最近在学Linux网络编程,奈何老师太水,这部分内容将都不讲直接让我们做实验。我也只能在网上(博客、全球最大的同性交友网站(bushi))寻找一些可以上手的开源项目。正好看到了这个五子棋小游戏,于是我把这个项目代码过了一遍后,自己动手实现+增加一些自己的功能。项目原版:https://github.com/youngyangyang04/Gomoku

  • 该项目主要分为四个小模块
  1. server.c服务端 :主要用select实现与客户端的连接,用于创建连接并监听网络上客户端的状态,并对客户端的请求作出相应应答,控制游戏进度。
  2. client.c 客户端 :用于向客户端提交请求。
  3. linker.c 存放客户端和服务端通用方法。
  4. checkWin.c:用于服务端检查当前游戏是否有人获得胜利。
  5. client_common.h 存放客户端通用数据和方法声明。
  6. client_common.c 存放客户端通用方法实现。
  7. server_common.h 存放服务端通用数据和方法声明。
  8. server_common.c 存放服务端通用方法实现。

其中,很多参数配置我都放在了common.h、client_common.h、server_common.h中,大家可以根据自己的情况进行修改。

下面是流程展示:

1.common.h中的设置:

在这里插入图片描述


2.开启服务器(IP和端口号都在common.h中配置)

在这里插入图片描述


3.登录客户端进行游戏(因为设置的玩家数最大3人,客户端数最大4人,所以第四个进入服务器的就拉进观战区)(注意,x、y是棋子下标,设左上坐标为(0,0))

在这里插入图片描述

在这里插入图片描述


4.游戏结束(由于时间关系,我把玩家C的客户端退出游戏了。)在这里插入图片描述


存在的问题:

这个问题是写给我自己看的你们不用管啊- -…

  1. (已解决)由于没有参考,在read和write到客户端消息的相关功能可能会出现fd异常导致服务器退出的问题。因为我在监听函数功能那跳过了当前收发消息客户端的sockfd,导致了收发消息功能函数执行过程中,如果客户端退出,然后监听函数没来得及吧这个sockfd从fd_set中去掉,导致的wirte一个空fd异常退出。问题原因是当客户端意外退出,服务端给客户端write是会收到RST报文,导致内核发送sigpipe信号。而该信号默认处理方式是结束进程,更改信号处理方式为不处理即可。

可改进方向(思路):

  1. 可以开创多个房间,每个房间有个房主。
  2. 房主可以设置五子棋棋盘大小,同时游戏人数,有开始游戏权限。
  3. select模型可以改为epoll,引入线程池,提高服务器并发能力。
  4. 更改传输协议,目前是传struct,后续可以改为json、protobuf等。
  5. 更改完传输协议后,就可以跨平台编写客户端了。

github地址:https://github.com/Left-Zzzz/muti-Gomoku-master

  • 28
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值