SQL Server пропал ошибка из-за WSACleanup

Я хотел бы попросить о помощи, так как я не знаю, что делать дальше. У меня есть симулятор, созданный в C ++, где он принимает ввод идентификатора от пользователя и проверяет, находится ли он в базе данных (созданной в 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). Если сервер работает, он работает нормально или все входные данные неверны, но если сервер не работает (мой код будет пытаться снова подключиться к серверному ПК, поэтому я должен вызвать 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

Решение

Не звоните в WSACleanup. WSACleanup предназначен для использования, когда вы больше не хотите осуществлять какую-либо связь через сокет. Это не так для вас.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]