C语言通过socket编程实现TCP通信Mysql通信

C语言通过socket编程实现与单片机的WiFi模块通信,读取数据库数据发送给单片机。

C语言运行在Linux系统上。

TCP/IP协议 叫做传输控制/网际协议,又叫网络通信协议。用来传输数据。

套接字(socket):在网络中用来描述计算机中不同程序与其他计算机程序的通信方式。socket其实是一种特殊的IO接口,也是一种文件描述符。用来实现tcp连接。

#include<stdio.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include "mysql.h"


 
 
#define portnum 8888 //随便定义一个端口
 
 
int main(int argc, const char *argv[])
{
    MYSQL           mysql;
    MYSQL_RES       *res = NULL;
    MYSQL_ROW       row;
    char            *query_str = NULL;
    int             rc, i, fields;
    int             rows;
int sockfd, new_fd;
struct sockaddr_in server_addr;//服务器地址
struct sockaddr_in clint_addr; //客户机地址
char buffer[128];
int nbite;
int sin_size;
 if (NULL == mysql_init(&mysql)) {        //Mysql连接程序
        printf("mysql_init(): %s\n", mysql_error(&mysql));
        return -1;
    }
    if (NULL == mysql_real_connect(&mysql,
                "主机地址",			//主机名 
                                      "cxs_f",									
                "cxs5120cxs",								
                "cxs",								
                4010,
                NULL,
                0)) {
        printf("mysql_real_connect(): %s\n", mysql_error(&mysql));
        return -1;
    }
    printf("Connected MySQL successful! \n");
 
//1. 创建套接字
if((sockfd=socket( AF_INET, SOCK_STREAM, 0)) == -1)//如果创建套接字失败
{
printf("create socket error!\n");
exit(1); 
}
 
//2.1 设置要绑定的地址,对server_addr初始化
bzero(&server_addr,sizeof(struct sockaddr_in));//全部成员清0
 
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons( portnum);//转换成网络字节序
server_addr.sin_addr.s_addr = htonl( INADDR_ANY);//转换成网络字节序
 
//2.2 绑定地址
bind( sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr) );
 
//3. 监听端口
listen(sockfd, 5);

while(1)
{
	
	
	
	
//4. 等待连接
sin_size = sizeof(struct sockaddr);
new_fd = accept(sockfd,(struct sockaddr *)(&clint_addr),&sin_size);
 
printf("server get connection from %s\n",(inet_ntoa(clint_addr.sin_addr)) );//打印出连接服务器的客户机地址


//mysql查询数据 
 query_str = "SELECT key1 FROM User WHERE username = '122'";
    rc = mysql_real_query(&mysql, query_str, strlen(query_str));
    if (0 != rc) {
        printf("mysql_real_query(): %s\n", mysql_error(&mysql));
        return -1;
    }
    res = mysql_store_result(&mysql);
    if (NULL == res) {
         printf("mysql_restore_result(): %s\n", mysql_error(&mysql));
         return -1;
    }
    rows = mysql_num_rows(res);
    printf("The total rows is: %d\n", rows);
    fields = mysql_num_fields(res);
    printf("The total fields is: %d\n", fields);
    while ((row = mysql_fetch_row(res))) {
        for (i = 0; i < fields; i++) {
            printf("%s\t", row[i]);
           
            
        }
        printf("\n");
    }

if(row[0]=="0") {

printf("su1\n");
char * sendData="1111\r\n";
printf("su2\n");
 send(new_fd,sendData,8,0) ;
printf("server received: %s\n",sendData);
printf("su3\n");

//mysql改写数据 
 query_str = "UPDATE User SET key1='0' WHERE username='122'";
    rc = mysql_real_query(&mysql, query_str, strlen(query_str));
    if (0 != rc) {
        printf("mysql_real_query(): %s\n", mysql_error(&mysql));
        return -1;
    }
    res = mysql_store_result(&mysql);
    if (NULL == res) {
         printf("mysql_restore_result(): %s\n", mysql_error(&mysql));
         return -1;
    }
    rows = mysql_num_rows(res);
    printf("The total rows is: %d\n", rows);
    fields = mysql_num_fields(res);
    printf("The total fields is: %d\n", fields);
    while ((row = mysql_fetch_row(res))) {
        for (i = 0; i < fields; i++) {
            printf("%s\t", row[i]);
        }
        printf("\n");
    }

}
//5. 接收数据
nbite = recv( new_fd, buffer, 128, 0);//返回接收到的数据长度
buffer[nbite] = '\0';
printf("server received: %s\n",buffer ); 
//mysql改写数据 
 query_str = "UPDATE User SET pai='buffer' WHERE username='122'";
 sprintf(query_str, "UPDATE User SET pai= '%s'  WHERE username='122'",buffer);
    rc = mysql_real_query(&mysql, query_str, strlen(query_str));
    if (0 != rc) {
        printf("mysql_real_query(): %s\n", mysql_error(&mysql));
        return -1;
    }
    res = mysql_store_result(&mysql);
    if (NULL == res) {
         printf("mysql_restore_result(): %s\n", mysql_error(&mysql));
         return -1;
    }
    rows = mysql_num_rows(res);
    printf("The total rows is: %d\n", rows);
    fields = mysql_num_fields(res);
    printf("The total fields is: %d\n", fields);
    while ((row = mysql_fetch_row(res))) {
        for (i = 0; i < fields; i++) {
            printf("%s\t", row[i]);
        }
        printf("\n");
    }
//结束测试  

printf("su\n");
//6. 结束连接
close( new_fd );


}
 
close(sockfd);
  mysql_close(&mysql);
return 0; 
}

编译时用下面的编译指令

gcc server.c -o sql1 -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值