socket+mysql

测试windows 下 Socket+Mysql调用。

环境:

OS:Win7; DBMS:Mysql;  IDE:codeblockS. 

server:

  1 #include <WINSOCK2.H>
  2 #include <stdio.h>
  3 #include <mysql.h>
  4 /*数据库连接用宏*/
  5 #define HOST "localhost"//本地
  6 #define USERNAME "root"//dbms user name
  7 #define PASSWORD "123456"//password
  8 #define DATABASE "test"//database name
  9 #pragma comment(lib,"ws2_32.lib")
 10 #pragma comment(lib,"C:\Program Files\MySQL\MySQL Server 5.5\lib\libmysql.lib")
 11 void query_sql(char* sql);//数据库查询
 12 int main(int argc,char **argv)
 13 {
 14     WORD myVersionRequest;
 15     WSADATA wsaData;
 16     int err;
 17     SOCKET serSocket;
 18     SOCKADDR_IN addr;
 19     int len;
 20     SOCKADDR_IN clientsocket;
 21     SOCKET serConn;
 22     char sendBuf[100];
 23     char receiveBuf[100];//接收
 24     char *query;
 25     query="select * from serverinfo";//查询学生表
 26 
 27     myVersionRequest=MAKEWORD(1,1);
 28     err=WSAStartup(myVersionRequest,&wsaData);
 29     if (!err)
 30     {
 31         printf("已打开套接字,等待连接!
");
 32     }
 33     else
 34     {
 35         printf("ERROR:嵌套字未打开!");
 36         return 1;
 37     }
 38     //进一步绑定套接字
 39     serSocket=socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字
 40 
 41     //需要绑定的参数
 42     addr.sin_family=AF_INET;
 43     addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
 44     addr.sin_port=htons(6000);//绑定端口
 45 
 46     bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//绑定完成
 47     listen(serSocket,5);//其中第二个参数代表能够接收的最多的连接数
 48 
 49     //////////////////////////////////////////////////////////////////////////
 50     //开始进行监听
 51     //////////////////////////////////////////////////////////////////////////
 52 
 53     len=sizeof(SOCKADDR);
 54     while (1)
 55     {
 56         query_sql(query);//仅用于测试,没有写客户端,所以在阻塞之前对数据库进行调用
 57         serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听
 58 
 59         sprintf(sendBuf,"hello, %s !",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里
 60         printf("Send:%s
",sendBuf);
 61         send(serConn,sendBuf,strlen(sendBuf)+1,0);
 62 
 63 
 64         recv(serConn,receiveBuf,sizeof(receiveBuf),0);
 65         printf("recv:%s
",receiveBuf);
 66 
 67         closesocket(serConn);//关闭
 68         WSACleanup();//释放资源的操作
 69         return 0;
 70     }
 71     return 1;
 72 }
 73 void query_sql(char* sql)
 74 {
 75     MYSQL my_connection; /*这是一个数据库连接*/
 76     int res; /*执行sql語句后的返回标志*/
 77     MYSQL_RES *res_ptr; /*指向查询结果的指针*/
 78     MYSQL_FIELD *field; /*字段结构指针*/
 79     MYSQL_ROW result_row; /*按行返回的查询信息*/
 80     int row, column; /*查询返回的行数和列数*/
 81     int i, j;
 82     /*初始化mysql连接my_connection*/
 83     mysql_init(&my_connection);
 84     /*建立mysql连接*/
 85     if (NULL != mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
 86                                    DATABASE, 0, NULL, CLIENT_FOUND_ROWS))  /*连接成功*/
 87     {
 88         printf("数据库查询query_sql连接成功!
");
 89         /*设置查询编码为gbk,以支持中文*/
 90         mysql_query(&my_connection, "set names gbk");
 91         res = mysql_query(&my_connection, sql);
 92         if (res)   /*执行失败*/
 93         {
 94             printf("Error: mysql_query !
");
 95             /*关闭连接*/
 96             mysql_close(&my_connection);
 97         }
 98         else     /*现在就代表执行成功了*/
 99         {
100             /*将查询的結果给res_ptr*/
101             res_ptr = mysql_store_result(&my_connection);
102             /*如果结果不为空,就把结果print*/
103             if (res_ptr)
104             {
105                 /*取得結果的行数和*/
106                 column = mysql_num_fields(res_ptr);
107                 row = mysql_num_rows(res_ptr);
108                 printf("查询到 %d 行 
", row);
109                 /*输出結果的字段名*/
110                 for (i = 0; field = mysql_fetch_field(res_ptr); i++)
111                     printf("%10s ", field->name);
112                 printf("
");
113                 /*按行输出結果*/
114                 for (i = 1; i < row+1; i++)
115                 {
116                     result_row = mysql_fetch_row(res_ptr);
117                     for (j = 0; j < column; j++)
118                         printf("%10s ", result_row[j]);
119                     printf("
");
120                 }
121             }
122             /*不要忘了关闭连接*/
123             mysql_close(&my_connection);
124         }
125     }
126     else
127     {
128         printf("数据库连接失败");
129     }
130 }
原文地址:https://www.cnblogs.com/A--Q/p/5972615.html