もうどうしたらいいのかわからないので教えていただきたいです。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 を呼び出す必要があります) 正しい値を 1 つ入力した後、別の mysql_query は、mysql サーバーがなくなったというエラーを返します。その後、プログラムは mysql_num_rows になると壊れます。
このコードは別の関数にあり、それらを 1 つずつコメントアウトすると、エラーは 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);
}
}
誰かが私を助けてくれることを願っています。