TCP服务器接收数据保存至MYSQL数据库(Ubuntu平台) 您所在的位置:网站首页 gta5无法从云服务器载入您保存的数据包 TCP服务器接收数据保存至MYSQL数据库(Ubuntu平台)

TCP服务器接收数据保存至MYSQL数据库(Ubuntu平台)

#TCP服务器接收数据保存至MYSQL数据库(Ubuntu平台)| 来源: 网络整理| 查看: 265

最终效果图(更新A3501对应的数值并记录更新时间)

在这里插入图片描述

sudo apt-get install mysql-server mysql-client sudo apt-get install libmysqlclient-dev

MySQL需要提前安装,因为MySQL文件(m.c)需要包含头文件(#include ),需要用到一些封装的函数

TCP套接字服务器( server.c 文件) #include "head.h" #include #include "m.h" int main(int argc,char **argv) { //创建tcp套接字 int fd=socket(AF_INET,SOCK_STREAM,0); //准备地址结构体ipv4 struct sockaddr_in addr; socklen_t len=sizeof(addr); bzero(&addr,len); addr.sin_family=AF_INET; addr.sin_addr.s_addr=htonl(INADDR_ANY); addr.sin_port=htons(atoi(argv[1])); //绑定地址到指定的通信端点 if(bind(fd,(struct sockaddr *)&addr,len)==0) { printf("\n绑定成功\n"); //设定监听状态 //注意:只有处于监听状态的tcp套接字,才能接受対端的链接请求 //参数2规定的是该通信端点能(同时)接受连接请求的数量 //不是连接请求的总数 if(listen(fd,2)==0) { printf("设置监听成功\n"); } } else { printf("端口绑定失败\n"); close(fd); printf("服务器已经断开\n"); return 0; } //静静等待对端的连接 struct sockaddr_in peeraddr; len=sizeof(peeraddr); bzero(&peeraddr,len); int connfd=accept(fd,(struct sockaddr *)&peeraddr,&len); printf("连接成功,对端地址:%s:%hu\n", inet_ntoa(peeraddr.sin_addr), ntohs(peeraddr.sin_port)); char msg[10]; char ID_CARD_NAME[10]; char ch; //循环等待数据接收 while(1) { bzero(msg,10);//数组清零 bzero(ID_CARD_NAME,10);//数组清零 if((read(connfd,msg,10)!=0)&&(msg[3]=='A')) { sprintf(ID_CARD_NAME,"%c%c%c%c%c",msg[3],msg[4],msg[5],msg[6],msg[7]); printf("ID=%s\n",ID_CARD_NAME); mysql_link();//连接MYSQL print_table("resident");//查看表中内容 update_data("credit=credit+1",ID_CARD_NAME); update_data("latest_time=current_timestamp",ID_CARD_NAME); print_table("resident");//查看表中内容 continue; } } mysql_closed();//关闭MySQL close(connfd); close(fd); printf("服务器已经断开\n"); return 0; }

head.h 文件

#ifndef _HEAD_H_ #define _HEAD_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif MYSQL数据库语句(m.c)

1.连接数据库(mysql_link) 2.关闭数据库(mysql_close) 3.打印 mydb 数据库的表(show_tables) 4.C语言打印表格(print_table) 5.更新数据库(update_date)

#include #include #include #include "mysql/mysql.h" #include "m.h" void mysql_link(void)//连接数据库 { MYSQL *mysql_ctr; mysql_ctr = mysql_init(NULL);//初始化 mysql_ctr = mysql_real_connect(mysql_ctr, IP_addr, user, password, database, 0 ,NULL, 0); if (mysql_ctr) { printf("\nMYSQL连接成功\n"); } else { printf("\nMYSQL连接失败\n"); } } void mysql_closed(void)//关闭数据库 { MYSQL *mysql_ctr; mysql_close(mysql_ctr); printf("MYSQL关闭成功\n"); } void show_tables(void)//打印在mydb数据库的表 { static int t=0; MYSQL *mysql_ctr; static MYSQL_RES *res; // 返回查询结果 static MYSQL_ROW row; // 返回行数据 t = mysql_query(mysql_ctr, "show databases"); if (t) { printf("Failed to query: %s\n", mysql_error(mysql_ctr)); } res = mysql_store_result(mysql_ctr); printf("\n***********************************************\n"); while ((row = mysql_fetch_row(res))) { for(t = 0; t static int i,j; MYSQL *mysql_ctr; char *cmd = "select * from "; static char query[50]; static MYSQL_RES *res; // 返回查询结果 static MYSQL_ROW row; // 返回行数据 memset(query, '\0', sizeof(query));//初始化query,清零 sprintf(query, "%s%s", cmd, table_name); i=mysql_query(mysql_ctr, query); if (i) { printf("Failed to query\n"); } else { //printf("\nQuery successfully!\n"); printf("\n%s",table_name); res = mysql_store_result(mysql_ctr); j=mysql_num_fields(res); printf("\n********************************************\n"); while (row = mysql_fetch_row(res)) //依次保存table每行的内容成数组 { for(i = 0; i MYSQL *mysql_ctr; static int k; static char query[100]; static char *cmd = "update resident"; sprintf(query, "%s set %s where ID=\"%s\"", cmd, handle, ID_name); //转义\" //printf("%s\n", query); k = mysql_real_query(mysql_ctr, query, strlen(query)); if (k) { printf("Failed to query: %s\n", mysql_error(mysql_ctr)); } printf("\nUpdate data sucessfully!\n"); }

m.h

#ifndef _M_H #define _M_H #include #define IP_addr "localhost" #define user "admin" #define password "admin" #define database "mydb" volatile extern MYSQL *mysql_ctr; void mysql_link(void); void mysql_closed(void); void print_table(char table_name[20]); void show_tables(void); void update_data(char handle[50], char ID_name[10]); #endif

终端GCC编译

gcc server.c m.c -o server -lmysqlclient

编译通过就OK,然后./server 50002指定通信端口号运行即可 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有