socket+mysql
测试windows 下 Socket+Mysql调用。
环境:
OS:Win7; DBMS:Mysql; IDE:codeblockS.
server:
- #include <WINSOCK2.H>
- #include <stdio.h>
- #include <mysql.h>
- /*数据库连接用宏*/
- #define HOST "localhost"//本地
- #define USERNAME "root"//dbms user name
- #define PASSWORD "123456"//password
- #define DATABASE "test"//database name
- #pragma comment(lib,"ws2_32.lib")
- #pragma comment(lib,"C:\\Program Files\\MySQL\\MySQL Server 5.5\\lib\\libmysql.lib")
- void query_sql(char* sql);//数据库查询
- int main(int argc,char **argv)
- {
- WORD myVersionRequest;
- WSADATA wsaData;
- int err;
- SOCKET serSocket;
- SOCKADDR_IN addr;
- int len;
- SOCKADDR_IN clientsocket;
- SOCKET serConn;
- char sendBuf[];
- char receiveBuf[];//接收
- char *query;
- query="select * from serverinfo";//查询学生表
- myVersionRequest=MAKEWORD(,);
- err=WSAStartup(myVersionRequest,&wsaData);
- if (!err)
- {
- printf("已打开套接字,等待连接!\n");
- }
- else
- {
- printf("ERROR:嵌套字未打开!");
- return ;
- }
- //进一步绑定套接字
- serSocket=socket(AF_INET,SOCK_STREAM,);//创建了可识别套接字
- //需要绑定的参数
- addr.sin_family=AF_INET;
- addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
- addr.sin_port=htons();//绑定端口
- bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//绑定完成
- listen(serSocket,);//其中第二个参数代表能够接收的最多的连接数
- //////////////////////////////////////////////////////////////////////////
- //开始进行监听
- //////////////////////////////////////////////////////////////////////////
- len=sizeof(SOCKADDR);
- while ()
- {
- query_sql(query);//仅用于测试,没有写客户端,所以在阻塞之前对数据库进行调用
- serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听
- sprintf(sendBuf,"hello, %s !",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里
- printf("Send:%s\n",sendBuf);
- send(serConn,sendBuf,strlen(sendBuf)+,);
- recv(serConn,receiveBuf,sizeof(receiveBuf),);
- printf("recv:%s\n",receiveBuf);
- closesocket(serConn);//关闭
- WSACleanup();//释放资源的操作
- return ;
- }
- return ;
- }
- void query_sql(char* sql)
- {
- MYSQL my_connection; /*这是一个数据库连接*/
- int res; /*执行sql語句后的返回标志*/
- MYSQL_RES *res_ptr; /*指向查询结果的指针*/
- MYSQL_FIELD *field; /*字段结构指针*/
- MYSQL_ROW result_row; /*按行返回的查询信息*/
- int row, column; /*查询返回的行数和列数*/
- int i, j;
- /*初始化mysql连接my_connection*/
- mysql_init(&my_connection);
- /*建立mysql连接*/
- if (NULL != mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD,
- DATABASE, , NULL, CLIENT_FOUND_ROWS)) /*连接成功*/
- {
- printf("数据库查询query_sql连接成功!\n");
- /*设置查询编码为gbk,以支持中文*/
- mysql_query(&my_connection, "set names gbk");
- res = mysql_query(&my_connection, sql);
- if (res) /*执行失败*/
- {
- printf("Error: mysql_query !\n");
- /*关闭连接*/
- mysql_close(&my_connection);
- }
- else /*现在就代表执行成功了*/
- {
- /*将查询的結果给res_ptr*/
- res_ptr = mysql_store_result(&my_connection);
- /*如果结果不为空,就把结果print*/
- if (res_ptr)
- {
- /*取得結果的行数和*/
- column = mysql_num_fields(res_ptr);
- row = mysql_num_rows(res_ptr);
- printf("查询到 %d 行 \n", row);
- /*输出結果的字段名*/
- for (i = ; field = mysql_fetch_field(res_ptr); i++)
- printf("%10s ", field->name);
- printf("\n");
- /*按行输出結果*/
- for (i = ; i < row+; i++)
- {
- result_row = mysql_fetch_row(res_ptr);
- for (j = ; j < column; j++)
- printf("%10s ", result_row[j]);
- printf("\n");
- }
- }
- /*不要忘了关闭连接*/
- mysql_close(&my_connection);
- }
- }
- else
- {
- printf("数据库连接失败");
- }
- }
socket+mysql的更多相关文章
- PHP连接MySQL报错:SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket 'MySQL' (2)
如下所示,PHP连接MySQL报错: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket 'MySQL' ...
- Mac mySql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)的解决办法
我的环境:Mac 10.11.6 ,mysql 5.7.14 . mac mySql 报错ERROR 2002 (HY000): Can't connect to local MySQL serv ...
- tomcat通过socket连接MySQL,不再占用服务端口【linux】
MySQL连接方式的说明 http://icbm.iteye.com/blog/1840673 MySQL除了最常见的TCP连接方式外,还提供SOCKET(LINUX默认连接方式).PIPE和SHAR ...
- MySQL数据库的两种连接方式:TCP/IP和Socket
Linux平台环境下主要有两种连接方式,一种是TCP/IP连接方式,另一种就是socket连接. 在Windows平台下,有name pipe和share memory(不考虑)两种. TCP/IP连 ...
- 如何修改MySQL字符集
首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则.这两个参数集可以在数据库实例.单个 ...
- MySQL学习笔记七:存储引擎
1.MySQL存储引擎的设计采用“插件式”方案,用户可以很方便地选择使用哪种存储引擎,想使用mysql没有提供的引擎时,可以自己安装进去. 查看支持的存储引擎 mysql> show engin ...
- MySQL更改数据库数据存储目录
MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录.下文总结整理了实践过程的操作步骤. 1:确认MySQL数据库存储目 ...
- 源码编译安装mysql
1 概述 首先来看下mysql的下载地址: http://ftp.plusline.de/mysql/Downloads/ 这里有mysql的各种版本 操作系统:CentOS releas ...
- 【转载】Mysql 查看连接数,状态
转载地址:http://blog.csdn.net/starnight_cbj/article/details/4492555 命令: show processlist; 如果是root帐号,你能看到 ...
随机推荐
- 【CodeVS 1218】【NOIP 2012】疫情控制
http://codevs.cn/problem/1218/ 比较显然的倍增,但是对于跨过根需要很多讨论,总体思路是贪心. 写了一上午,不想再说什么了 #include<cstdio> # ...
- caffe使用
训练时, solver.prototxt中使用的是train_val.prototxt ./build/tools/caffe/train -solver ./models/bvlc_referenc ...
- java-首字母大小写
/** * 首字母小写 * * @param str * @return */ public static String toLowerCaseFirstChar(String s) { if (Ch ...
- Linux网卡的相关配置总结
当有多个网卡的时候,我们需要进行相关的配置. 一.如何改变网卡的名字? 修改/etc/udev/rules.d/70-persistent-net.rules 进去之后的效果是 根据mac地址,把没用 ...
- JVM学习笔记:字节码执行引擎
JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667
- 【BZOJ-1040】骑士 树形DP + 环套树 + DFS
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3312 Solved: 1269[Submit][Status ...
- JSP教程推荐
从搭建环境到上手JSP再到Servlet. http://www.runoob.com/jsp/jsp-tutorial.html
- C++开发的基于TCP协议的内网聊天工具
项目相关地址 源码:https://github.com/easonjim/TCPChat bug提交:https://github.com/easonjim/TCPChat/issues
- dotnet文件操作
/// <summary> /// 创建文件夹 /// </summary> /// <param name="sender"></par ...
- HDU4612 Warm up
Time Limit: 5000MS Memory Limit: 65535KB 64bit IO Format: %I64d & %I64u Description N planet ...