• 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 }
  • 相关阅读:
    风讯DotNetCMS sp5安装笔记
    datalist中实现自动编号写法
    windows server 2008 自动登录设置
    C#软件监控外部程序运行状态
    WPF启动屏幕SplashScreen
    Windows Server 2019 在桌面上显示“我的电脑”
    使用jquery的load方法加载html页面,html引入的js无效
    sql查询文章上一篇下一篇
    C#调用user32.dll Win32的API函数
    C#调用dll提示"试图加载格式不正确的程序
  • 原文地址:https://www.cnblogs.com/A--Q/p/5972615.html
Copyright © 2020-2023  润新知