由于WSACleanup,sql server已消除错误

sql server has gone away error because of WSACleanup

本文关键字:错误 server WSACleanup sql 由于      更新时间:2023-10-16

我想寻求帮助,因为我不知道该怎么办了。我在c++中创建了一个模拟器,它接受用户输入的id,并检查它是否在数据库中(在mysql工作台中创建),该数据库仅在localhost中。

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);
    }
}

我希望有人能帮我。

不要调用WSACleanup。WSACleanup是在您不想再进行任何套接字通信时使用的。你不是这样的。

相关文章: