网络编程------TCP协议实现网络版三子棋小游戏

以下用到的TCP协议的程序代码见:网络编程------TCP协议网络程序

以下用到的三子棋的游戏规则的相关代码见:三子棋

        在网络编程------TCP协议网络程序一文中根据TCP协议分别实现了单进程,多进程,多线程版本的服务器端程序。在多进程和多线程环境中服务器可以同时接收来自多个客户端的连接请求并与之互发消息进行通信。在本文中将继续根据TCP协议来实现与客户端的通信。

        本文中的二者通信是基于之前写过的三子棋小游戏。客户端和服务器端分别扮演两个游戏玩家,来实现对战操作。服务器端和客户端在正式进入游戏前的操作与在网络编程------TCP协议网络程序一文中的操作相同。

        服务器端:先打开网卡文件,绑定套接字,将文件描述符设置为监听模式,接收来自客户端的连接请求。客户端:打开文件描述符,向服务器端发出连接请求。关于二者这部分前期的工作不在重复。

        待二者连接建立成功之后,便开始通信。因为二者要下棋对战,所以每次都要将各自的下棋坐标位置发给对方,然后各自将棋盘打印出来。一人一次走一步,一个人发完消息,另一个人接收完之后在发送自己的坐标选择给对方。这就实现了二者之间通过网络来对战的目的。

        所以该程序代码是三子棋项目和TCP协议网络协议代码的结合。具体如何实现可参照上述两篇博客。

        代码如下:

        头文件comm.h:

#pragma once
                                                                                                                
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#include<sys/wait.h>
#include<time.h>

#define ROW 3
#define COL 3

//坐标信息
typedef struct
{
    int x;
    int y;
}location;

//客户端发送的进入游戏或退出游戏的信息
typedef struct Res
{
    int res;//1表示开始游戏,0表示退出游戏
}Response;
void menu();//打印菜单
void print(char arr[ROW][COL], int x, int y);//打印棋盘
void Init(char arr[ROW][COL], int x, int y);//初始化数组
//移动函数
void move(char arr[ROW][COL],int x,int y,location* loc,char flag);
int  iswin(char arr[ROW][COL], int x, int y);//判断是否有人赢或产生平局
int who_win(int ret);//判断是谁赢       

        服务器端和客户端使用的一些方法封装函数文件comm.c:

#include "comm.h"                                                                                               

void Init(char arr[ROW][COL], int x, int y)//数组的初始化函数定义
{
    memset(arr, ' ', x*y*sizeof(arr[0][0]));
}

void menu()//菜单函数定义
{
    printf("*****************************\n");
    printf("****1.开始游戏 0.退出游戏****\n");
    printf("*****************************\n");
}

void print(char arr[ROW][COL], int x, i
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值