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