我想寻求帮助,因为我不知道该怎么办了。我有一个用 c++ 创建的模拟器,它接受来自用户的 id 输入并检查它是否在仅在本地主机中的数据库中(在 mysql 工作台中创建)。
sqlQuery = "SELECT staffaccess.card_number FROM proxycardsim.staffaccess WHERE staffaccess.card_number = "
+ inputID;
if(mysql_ping(theInstance.connects))
{
}
int queryState = mysql_query(theInstance.connects, sqlQuery);
resultSet = mysql_store_result(theInstance.connects);
rowNum = mysql_num_rows(theInstance.resultSet);
if (rowNum == NULL)
{
mysql_free_result(theInstance.resultSet);
return false;
}
else
{
mysql_free_result(theInstance.resultSet);
return true;
}
问题是模拟器连接到另一台用作服务器的计算机(通过winsock连接)。如果服务器启动,它可以正常工作或者如果所有输入都错误,但是如果服务器关闭(我的代码将尝试再次连接到服务器 pc,所以我必须调用 WSACleanup)在输入一个正确的值并输入后另一个 mysql_query 返回 mysql 服务器已消失的错误。然后程序会在转到 mysql_num_rows 时中断。
我在另一个函数中有这段代码,当我将它们一个一个注释掉时,我发现错误是由于 WSACleanup() 引起的。如果 WSACleanup 行不存在,我的查询运行正常。
if ( false == theInstance.compareID(m_IDEntry))
{
addData(ConsoleLog,rec,0,0);
}
else
{
// Send an initial buffer
iResult = send( connectSocket, sendBuf, (int)strlen(sendBuf), 0 );
if(false == theInstance.addToLog(m_IDEntry))
{
addData(ConsoleLog,rec,0,3);
}
if (iResult == SOCKET_ERROR) {
closesocket(connectSocket);
WSACleanup();
serverConnect();
iResult = send( connectSocket, sendBuf, (int)strlen(sendBuf), 0 );
}
if (iResult != SOCKET_ERROR) {
addData(ConsoleLog,rec,0,1);
}
iResultRcv = recv(connectSocket, recvbuf, recvbuflen, 0);
if ( iResultRcv <= 0 )
{
addData(ConsoleLog,rec,0,7);
}
}
我希望有人可以帮助我。