由于WSACleanup,sql server已经消失了

时间:2013-09-03 05:57:30

标签: c++ mysql winsock2 wsacleanup

我想请求帮助,因为我不知道该怎么办。我有一个用c ++创建的模拟器,它接受来自用户的id输入并检查它是否在数据库中(在mysql workbench中创建),它只在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);
    }

}

我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

不要调用WSACleanup。当您不再需要进行任何套接字通信时,可以使用WSACleanup。对你来说情况并非如此。