专栏首页Unity TechnologyJtro的技术分享:游戏客户端通过Mysql留言给另一台游戏客户端

Jtro的技术分享:游戏客户端通过Mysql留言给另一台游戏客户端

首先,需要编码前的准备,第一个就是下载Mysql,配置好环境,安装Mysql的时候要记住自己设置的用户名和密码。然后下载本人提供的dll文件,下载连接放在评论区,再下载一个Navicat for MySql软件。 然后建立MySql数据库,步骤如下:

1.登录管理系统

测试数据库连接.PNG

在确定测试连接好了之后再点击确定,要不然没有用的。切记!

右击连接名,新建数据库,将数据库的名称命名为:msgboard

新建数据库.PNG

在msgboard中新建一个msg的表,里面包含ID、name、msg 3种数据,ID设置为自动递增的类型,然后手动的添加几条数据,如下图所示:

新建的表中数据.PNG

tips:保存表的时候如果跳出一个提示需要输入键长度,可将栏位符集属性设置为utf8,再将键长度设置为20.

然后修改Socket异步程序,使之成为留言板服务端程序

引用MySql.Data.dll,这个用到我在评论区放的连接中的文件了,添加这个引用就好。

1.在写入头文件:

using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data;

2.在Serv中添加指向MySql连接成员sqlConn

 MySqlConnection sqlConn;   

3.在Start方法中完成连接MySql和选择数据库2个步骤,还记得安装MySQL的密码吗?在这里需要用到的。

   //数据库 留言板
            string connStr = "Database=msgboard;Data Source=127.0.0.1;";
            connStr += "User Id = zSql;Password = zhang826;port = 3306";//你设置的用户名和密码
            sqlConn = new MySqlConnection(connStr );
            try
            {
                sqlConn.Open();
            }
            catch (Exception e)
            {
                Console.WriteLine(" [ 数据库 ] 数据库连接失败");
                return;
            }
            //数据库 留言板结束

4.修改ReceiveCb函数,处理留言板程序,核心代码实现的功能是:如果客户端发送的字符串是“_GET”,那么服务器将会查询数据库,并将最新的10条留言发送给客户端。如果客户端发送的是其他的字符串,那么服务器就把它插入数据库中,代码如下:

 Conn conn = (Conn)ar.AsyncState;
            try
            {
                int count = conn.socket.EndReceive(ar);
                //关闭信号

                //数据处理
                string str = System.Text.Encoding.UTF8.GetString(conn.readBuff, 0, count);
                Console.WriteLine("收到 [" + conn.GetAdress() + "] 数据:" + str);
                HandleMsg(conn, str);
                //继续接收
                conn.socket.BeginReceive(conn.readBuff, conn.buffCount, conn.BuffRemain(), SocketFlags.None, ReceiveCb, conn);
            }
            catch (Exception)
            {
                throw;
            }

构造一个方法:

  public void HandleMsg(Conn conn, string str)
        {
            if (str == "_GET")
            {
                string cmdStr = "select * from msg order by id desc limit 10;";
                MySqlCommand cmd = new MySqlCommand(cmdStr, sqlConn);
                try
                {
                    MySqlDataReader dataReader = cmd.ExecuteReader();
                    str = "";
                    while (dataReader.Read())
                    {
                        str += dataReader["name"] + ":" + dataReader["msg"] + "\n\r";
                    }
                    dataReader.Close();
                    byte[] bytes = System.Text.Encoding.Default.GetBytes(str);
                    conn.socket.Send(bytes);
                }
                catch (Exception e)
                {

                    Console.WriteLine("[ 数据库查询失败 ]" + e.Message);
                }
            }
            //插入数据
            else
            {
                string cmdStrFormat = "insert into msg set name = '{0}',msg = '{1}';";
                //有的版本不支持上述语法,改成这样:inset into msg ("name","msg")values ("{1}","{1}");以使之不报错
                string cmdStr = string.Format(cmdStrFormat, conn.GetAdress(), str);
                MySqlCommand cmd = new MySqlCommand(cmdStr, sqlConn);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception e)
                {

                    Console.WriteLine("[ 数据库 ] 插入失败 " + e.Message);
                }
            }
        }

运行服务器端:

服务器端.PNG

然后使用上一个版本的客户端,打开客户端连接服务器:

获取留言内容.PNG

OK,到此结束了,在这过程中,出了许多问题,还好慢慢的解决了,编码真的是来不得半点粗心。 感谢各位。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jtro的源码分享:客户端通过服务器同步位置消息

    之前的源码讲过如何使用sql留言的功能,今天讲解两个客户端如何通过服务器来同步每个玩家的位置。 首先是服务器端,用到之前的异步socket的服务器了,如果没有...

    LittleU
  • Jtro的技术分享:网页调起unity的exe程序并自动登录

    思路是这样:通过一个额外的exe文件来实现登录,并保存一个token文件,然后在unity的项目提交数据的时候读取这个token向服务器发送数据。 下面是具体...

    LittleU
  • 数据结构与算法(十一)

    接下来要介绍的几种数据结构,都涉及到一个概念:"节点",比如单链表,双链表,二叉树,图.基于节点的数据结构,在某些时候具有性能上的独特优势.

    LittleU
  • 《从0到1学习Spark》-- 初识Spark SQL

    今天小强给大家介绍Spark SQL,小强的平时的开发中会经常使用Spark SQL进行数据分析查询操作,Spark SQL是整个Spark生态系统中最常用的组...

    程序员小强
  • 开发 | 一篇文章,带你从 0 到 1 开发小程序插件

    知晓君
  • 用漫画看懂ElasticSearch弹性搜索(一)

    在云计算的Paas层,经常有听到ElasticSearch,我最初的理解,该组件用来进行电商网页的模糊性查找最好了。例如在taobao的搜索栏查找“给爸爸的生日...

    希望的田野
  • 『互联网架构』软件架构-git服务搭建与使用(四)

    很多跟我一样大概有十多年的同事,一直做着企业内部开发,现在还在使用svn,跟大家聊起来git,他们都知道,只是项目里用习惯了svn一直也没改变,我相信这只是时间...

    IT故事会
  • 企业面试题: 请用JS去除字符中(1)所有空格 (2)去除两头空格

    请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。

    舒克
  • jquery 滚轮插件 示例 - 整屏滚动

    要做出这个效果,其实不用说,首先要把这五个div的基本HTML+CSS给写出来先。

    Devops海洋的渔夫
  • Apache Hive Join

    A left join B 的连接的记录数与A表的记录数同

    DataScience

扫码关注云+社区

领取腾讯云代金券