2013-09-03 3 views
-1

더 이상 할 일이 없으므로 도움을 요청하고 싶습니다. 나는 C++로 작성된 시뮬레이터를 가지고 있는데, 사용자로부터 입력 된 id를 받아들이고 localhost에만있는 데이터베이스 (mysql workbench에서 생성 된 것)에 있는지 확인한다.WSACleanup 때문에 SQL Server에 오류가 발생했습니다.

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을 통해 연결됨)는 서버 역할을 다른 컴퓨터에 연결되어 있다는 점이다. 서버가 작동 중이면 ok 또는 모든 입력이 잘못되었지만 서버가 다운 된 경우 (올바른 코드 값을 입력 한 후 WSACleanup을 호출해야하므로 코드가 서버 pc에 다시 연결됩니다) 또 다른 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은 더 이상 소켓 통신을 원하지 않을 때 사용하기위한 것입니다. 그것은 당신에게 해당하지 않습니다.

+0

다른 입력이있을 때 서버에 다시 연결하려고하면 WSACleanup을 호출하지 않아도됩니까? 내 서버 연결 코드에는 WSAStartup이 있기 때문에. – Jam

+0

WSAStartup도 이동해야합니다. 프로그램이 시작될 때 WSAStartup을 한 번 호출하고 프로그램이 종료되면 WSACleanup을 한 번 호출하십시오. – john

+0

도움을 주셔서 대단히 감사드립니다. 방금 두 개의 신호를 받아들이도록 서버를 만들었고 내 클라이언트 코드를 다시 정리했습니다. SQL은 더 이상 오류를주지 않습니다. – Jam

관련 문제