我已经实现了部分MySQL协议的算法,但是客户端在Windows平台上没法正常和服务器通信。因为在和MySQL服务器建立连接之后,服务器会给客户端发送一个Greeting包,但是此时客户端的socket会自动回应一个空的ACK。实际上发送出去的ACK的尾部必须要带有MySQL的数据格式而不是空的ACK,不然服务器会自动断开连接。
问题已经解决:错误的原因是recv函数必须要向对方发送空的TCP,然后对方同样回复一个空的TCP后说明服务器已经发送完毕,但是MySQL服务器并不会回复空的TCP。解决方法就是设置TCP接收超时,然后循环接收,直到recv的返回值大于0。
个人感觉java版的mysql-connector弄得比较好,C++版本的API在部分电脑上会出现各种问题,比如指针指向0x000...、找不到dll等。
C++的API有bug,不是找不到dll就是野指针。现阶段还在学习C++,不然也不会弄这个。这个问题你遇到过吗?
追答这种问题应该很常见,很多不是库有问题,而是使用方法问题。很多程序员非常自信的觉得自己搞肯定更好,但是其实这都是不可能的。维护一个不是自己产品的C++库代价是非常高昂的,如果你刚刚学C++,就想都不要想。没有3-5个资深C++工程师你是搞不定的
追问我压根就没想过长期维护,我只是想知道为什么mysql的socket能对TCP达到精细的控制。顺便方便我找工作。