我想请求帮助,因为我不知道该怎么办。我有一个用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);
}
}
我希望有人可以帮助我。
答案 0 :(得分:1)
不要调用WSACleanup。当您不再需要进行任何套接字通信时,可以使用WSACleanup。对你来说情况并非如此。