C++相关学习记录

最近用到了很多相关的东西,记录下来,方便下次查找

C++MySql的使用

链接数据库

//链接数据库
mysql_init(&conn);

if (mysql_real_connect(&conn, "127.0.0.0", "root", "paassword", "table", 3306, nullptr, CLIENT_FOUND_ROWS))
	std::cout << "链接成功" << std::endl;
else
	std::cout << "连接失败" << std::endl;

数据库操作

sprintf(query,"select * from user where user_id='%s'",id);
mysql_query(&conn,query);
  • 配合sprintf一起使用,很舒服而且方便。
  • mysql_query函数执行query语句,如果是insert或者update就直接执行完了,如果是select的话,再用其他函数获取结果。
  • mysql_query函数的返回值,0代表查询成功,1是查询失败,指sql语法错误。
  • 查询完之后使用mysql_store_result获取结果集。返回值是MYSQL_RES *
  • mysql_num_rows获取结果集的行数
  • mysql_num_fields获取结果集的列数(每一列的字段就是数据库中的列代表的字段)
MYSQL_RES * res = mysql_store_result(&conn);
int n = mysql_num_rows(res),m = mysql_num_fields(res);
  • 使用mysql_fetch_row获取当前记录行 返回值是MYSQL_ROW
for(int i  =  0 ; i < n ; i++)
{
   
	MYSQL_ROW row = mysql_fetch_row(res);
	//row[j]获取j列字段的数据
}
  • row[j]获取字段的数据(获取的全都是char*类型的,应该是)
  • 查找为空的判断方法:mysql_num_rows的结果为0,代表没有查到相应的数据。

C++ socket通信

学习自 @河边小咸鱼 的博客 C++网络编程学习,大佬写的真不错
C++网络编程学习

对代码进行了修改,更加适应我自己的使用环境了?
因为用的时候我的环境是,服务端是linux,客户端是windows,所以把对应的跨平台处理代码删掉了x

Server.h Server.cpp

#ifndef _TcpServer_hpp_
#define _TcpServer_hpp_

#include <arpa/inet.h> //selcet
#include <mysql.h>
#include <unistd.h> //uni std

#define SOCKET int
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)

#include <cstring>
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

enum{
   
    CMD_LOGIN,
    CMD_LOGINRESULT,
    //需要的命令这在加上,为了方便数据处理
};
//数据文件头 请务必写成这样 方便数据传输
struct DataHeader{
   
    short cmd;
    short data_length;
};
//真正进行传输的数据 按照结构体去传
//实际上传输就是转成(char*)去传过去,然后对面再转成相应的数据,由于结构的内存是一整块的,所以传输的时候使用结构体传输。
//如果需要传输其他的数据,就按照这个格式在后面补上更多
struct LOGIN:public DataHeader{
   
    LOGIN(){
   
        this->cmd = CMD_LOGIN;
        this->data_length = sizeof(LOGIN);
    }
    char user_id[256];
    char password[256];
};
struct LoginResult:public DataHeader{
   
    LoginResult(){
   
        this->cmd = CMD_LOGINRESULT;
        this->data_length = sizeof(LoginResult);
    }
    //密码不对返回0 密码对返回1 无此账号返回2
    int result;
};

class TcpServer
{
   
  public:
    //构造
    TcpServer();
    //析构
    virtual ~TcpServer();
    //初始化socket 返回1为正常
    int InitSocket();
    //绑定IP/端口
    int Bind(const char *ip, unsigned short port);
    //监听端口
    int Listen(int n);
    //接受连接
    int Accept();
    //关闭socket
    void CloseSocket();
    //查询是否有待处理消息
    bool OnRun();
    //判断是否工作中
    bool IsRun();
    //发送数据
    //int SendData(char *_head, SOCKET _temp_socket);
    int SendData(DataHeader *_head, SOCKET _temp_socket);

    //接收数据
    int RecvData(SOCKET _temp_socket);

    //处理请求
    void cal(DataHeader *_head, SOCKET _temp_socket);

  private:
    SOCKET _sock;
    std::vector<SOCKET> _clients; //储存客户端socket
};

#endif

//TcpServer.cpp
#include "TcpServer.h"

TcpServer::TcpServer()
{
   
    _sock = INVALID_SOCKET;
}
TcpServer::~TcpServer()
{
   
    CloseSocket();
}

int TcpServer::InitSocket
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值