C++ 怎么使用SOCKET连接MySQL服务器?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 怎么使用SOCKET连接MySQL服务器?相关的知识,希望对你有一定的参考价值。
我已经实现了部分mysql协议的算法,但是客户端在Windows平台上没法正常和服务器通信。因为在和MySQL服务器建立连接之后,服务器会给客户端发送一个Greeting包,但是此时客户端的socket会自动回应一个空的ACK。实际上发送出去的ACK的尾部必须要带有MySQL的数据格式而不是空的ACK,不然服务器会自动断开连接。
问题已经解决:错误的原因是recv函数必须要向对方发送空的TCP,然后对方同样回复一个空的TCP后说明服务器已经发送完毕,但是MySQL服务器并不会回复空的TCP。解决方法就是设置TCP接收超时,然后循环接收,直到recv的返回值大于0。
1.打开安装MySQL的目录,在windows系统中如果是默认路径,应该和我的是一样的:C:\Program Files\MySQL\MySQL Server 8.0 参考技术B 首先需要把mysql中的头文件和库文件放入到c++项目工程中
1.打开安装MySQL的目录,在windows系统中如果是默认路径,应该和我的是一样的:C:\Program Files\MySQL\MySQL Server 8.0追问
个人感觉java版的mysql-connector弄得比较好,C++版本的API在部分电脑上会出现各种问题,比如指针指向0x000...、找不到dll等。
参考技术C 最好找一些现成的api,否则每次sql做啥升级,你就头疼死了追问C++的API有bug,不是找不到dll就是野指针。现阶段还在学习C++,不然也不会弄这个。这个问题你遇到过吗?
追答这种问题应该很常见,很多不是库有问题,而是使用方法问题。很多程序员非常自信的觉得自己搞肯定更好,但是其实这都是不可能的。维护一个不是自己产品的C++库代价是非常高昂的,如果你刚刚学C++,就想都不要想。没有3-5个资深C++工程师你是搞不定的
追问我压根就没想过长期维护,我只是想知道为什么mysql的socket能对TCP达到精细的控制。顺便方便我找工作。
c调用 socket 如果客户端连接断开,怎么判断? 还有怎么向多个 连接在一个服务器上的多个客户
c调用 socket 如果客户端连接断开,怎么判断? 还有怎么向多个 连接在一个服务器上的多个客户端发送同样的内容
参考技术A 一:如果客户端关闭连接,服务器端会收到一条连接关闭的消息,对应到你的C函数API就是,使用recv(或者read),读出的大小为0,此时就表明客户端断开连接了,如果是TCP的话,你也调用一次close(或者shutdown),这样就可以把一个TCP连接完美优雅的断开。
二:
服务器编程肯定会在accept新连接之后,保存在一个数据结构中的。发送同样的内容,只需要遍历此数据结构即可。 参考技术B
recv函数返回0。
如果是长连接,可以通过心跳包实现。
另外服务端在编写代码的时候应该把连接上的客户端的socket放到一个socket队列(用于存储在线的客户端) 每个发送一次 你就轮询一次发送一次就好了
UDP不再讨论范围内
以上是关于C++ 怎么使用SOCKET连接MySQL服务器?的主要内容,如果未能解决你的问题,请参考以下文章