当前位置:Gxlcms > 数据库问题 > socket+mysql “项目中的问题”

socket+mysql “项目中的问题”

时间:2021-07-01 10:21:17 帮助过:4人阅读

 1 #include <stdio.h>
 2  
 3 int **your_function(int *pArray[])
 4 {
 5     *pArray[0] = 1;
 6     *pArray[1] = 2;
 7     *pArray[2] = 3;
 8     return pArray;
 9 }
10  
11 void print_array(int *pArray[])
12 {
13     int i = 0;
14     for (; i<3; i++)
15     {
16         printf("%d ",*pArray[i]);
17     }
18     printf("\n");
19 }
20  
21 void main()
22 {
23     int a = 5, b = 4, c = 3;
24     int *array[3] = {&a,&b,&c};
25     int **p;
26     print_array(array);
27     p = your_function(array);
28     print_array(p);
29 }

 

函数名: write  功 能: 写到一文件中  用 法: int write(int handle, void *buf, int nbyte); mysql_fetch_row() 函数从结果集中取得一行作为数字数组。 write(sockfd,db(),sizeof(char)*100);写回客户机char *db()调用返回查询出的数据g_row[0],g_row[1],g_row[2],g_row[3]数据库查询出来的。 问题已解决:
1     for(i=0;i<4;i++)
2         for(j=0;j<strlen(g_row[i]);j++)
3         if(g_row[i][j]!=\0)
4           str[k]=g_row[i][j],k++;

返回str即可。

 

 

---down 一堆带整理的‘恶心’代码

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 #include<errno.h>
  5 #include<sys/types.h>
  6 #include<sys/socket.h>
  7 #include<netinet/in.h>
  8 #include <mysql.h>
  9 #define DEFAULT_PORT 8000 //默认端口
 10 #define MAXLINE 4096
 11 #define MAX_BUF_SIZE 1024 // 缓冲区最大字节数db
 12 MYSQL *g_conn; // mysql 连接db
 13 MYSQL_RES *g_res; // mysql 记录集db
 14 MYSQL_ROW g_row; // 字符串数组,mysql 记录行db
 15 
 16 const char *g_host_name = "localhost";
 17 const char *g_user_name = "root";
 18 const char *g_password = "123456";
 19 const char *g_db_name = "test";
 20 const unsigned int g_db_port = 3306;
 21 
 22 void str_echo(int sockfd);
 23 //------db down
 24 void print_mysql_error(const char *msg) { // 打印最后一次错误
 25     if (msg)
 26         printf("%s: %s\n", msg, mysql_error(g_conn));
 27     else
 28         puts(mysql_error(g_conn));
 29 }
 30 
 31 int executesql(const char * sql) {
 32     /*query the database according the sql*/
 33     if (mysql_real_query(g_conn, sql, strlen(sql))) // 如果失败
 34         return -1; // 表示失败
 35 
 36     return 0; // 成功执行
 37 }
 38 
 39 
 40 int init_mysql() { // 初始化连接
 41     // init the database connection
 42     g_conn = mysql_init(NULL);
 43     
 44     /* connect the database */
 45     if(!mysql_real_connect(g_conn, g_host_name, g_user_name, g_password, g_db_name, g_db_port, NULL, 0)) // 如果失败
 46         return -1;
 47 
 48     // 是否连接已经可用
 49     //if (executesql("set names utf8")) // 如果失败
 50        // return -1;
 51     return 0; // 返回成功
 52 }
 53 
 54 
 55 char *db(char *sqlstr) {
 56     char *str=(char *)malloc(sizeof(char)*30+1);
 57     int i,j,k=0;
 58     if (init_mysql());
 59         print_mysql_error(NULL);
 60 
 61     char sql[MAX_BUF_SIZE];
 62 
 63     if (executesql(sqlstr))
 64         print_mysql_error(NULL);
 65 
 66     g_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集
 67 
 68 /*
 69     int iNum_rows = mysql_num_rows(g_res); // 得到记录的行数
 70     int iNum_fields = mysql_num_fields(g_res); // 得到记录的列数
 71 
 72     printf("共%d个记录,每个记录%d字段\n", iNum_rows, iNum_fields);
 73 
 74     puts("id\tname\tage\tcount\n");
 75 
 76     while ((g_row=mysql_fetch_row(g_res))) // 打印结果集
 77         printf("%s\t%s\t%s\t%s\n", g_row[0], g_row[1], g_row[2], g_row[3]); // 第一,第二字段
 78 */
 79 
 80 //    if((g_row=mysql_fetch_row(g_res))){
 81 
 82     g_row=mysql_fetch_row(g_res);
 83 
 84 
 85     for(i=0;i<4;i++)
 86         for(j=0;j<strlen(g_row[i]);j++)
 87         if(g_row[i][j]!=\0)
 88           str[k]=g_row[i][j],k++;
 89 
 90         mysql_free_result(g_res); // 释放结果集
 91         mysql_close(g_conn); // 关闭链接
 92         return str;
 93    // }
 94 /*    mysql_free_result(g_res); // 释放结果集
 95 
 96     mysql_close(g_conn); // 关闭链接
 97     MYSQL_ROW x={"aaa","222"};
 98     return x;
 99     return EXIT_SUCCESS;*/
100 }
101 
102 //-----db up
103 
104 int main(int argc, char** argv)
105 {
106     int socket_fd, connect_fd;
107     struct sockaddr_in servaddr,cliaddr;
108     char buff[MAXLINE],temp[MAXLINE];
109     int n;
110     uint32_t len;
111      //初始化Socket
112     if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 )
113     {
114     printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);
115     exit(0);
116     }
117     //初始化
118     memset(&servaddr, 0, sizeof(servaddr));
119     servaddr.sin_family = AF_INET;
120     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。
121     servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT
122    
123     //将本地地址绑定到所创建的套接字上
124     if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){
125     printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
126     exit(0);
127     }
128     //开始监听是否有客户端连接
129     if( listen(socket_fd, 10) == -1){
130     printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);
131     exit(0);
132     }
133     printf("======waiting for client‘s request======\n");
134     while(1){
135     len=sizeof(cliaddr);
136     //阻塞直到有客户端连接
137         connect_fd = accept(socket_fd, (struct sockaddr *)&cliaddr,&len);
138   
139     //向客户端发送回应数据
140         if(!fork())//进入子进程,在子进程服务终止时会给父进程发送一个SIGCHLD信号,父进程未处理,子进程进入僵死状态,必须清理僵死状态,这里牵扯Unix信号的处li.
141     {    //子进程在其内部关闭监听套接字
142         close(socket_fd);
143                str_echo(connect_fd);
144         //输出客户协议信息
145         printf("\nfrom:%s,port:%d\n",(char *)inet_ntop(AF_INET,&cliaddr.sin_addr,temp,sizeof(temp)),ntohs(cliaddr.sin_port));
146      close(connect_fd);
147      exit(0);
148       }
149         close(connect_fd);
150     }
151     close(socket_fd);
152 }
153 void str_echo(int sockfd)
154 {
155     ssize_t n;
156     char buf[MAXLINE];
157     while(( n=read(sockfd,buf,MAXLINE))>0)
158         write(sockfd,db(buf),sizeof(char)*100);
159       //write(sockfd,db(buf),n);
160     if(n<0 && errno==EINTR)
161      perror("str_echo:red error");
162 }

 

socket+mysql “项目中的问题”

标签:

人气教程排行