CAsyncSocket verliert verbindung



  • habe eine server- und eine clientanwendung die mit einander verbunden sind.
    ich habe auf beiden anwendungen eine keep alive - funktion die alle 20 sekunden eine information zur gegenseite (server bzw. client) sendet und dann guckt ob eine entsprechende information zurück gesendet hat.
    wenn ich den client eine weile nicht benutze, dann sagt mir die keep alive - funktion das ich keine verbindung mehr habe, weil die gegenseite keine information zurückgesendet hat.

    woran kann das liegen ??



  • ist die verbindung denn wirklich getrennt? als das du z.b. es überprüfst indem du andere daten sendest.
    ich würde die verbindung nicht durch solch eine methode überprüfen, ob daten zurück kommen, sondern in dem du daten sendest und überprüfst ob ein fehler beim senden aufgetreten ist, eventuell ist der server mal so ausgelastet, das er nicht gleich antworten kann.

    folgendes beispiel habe ich in der msdn gefunden, hoffe es hilft weiter

    // CMyAsyncSocket is derived from CAsyncSocket and defines the 
    // following variables:
    //   CString    m_sendBuffer;   //for async send
    //   int    m_nBytesSent;
    //   int    m_nBytesBufferSize;
    
    void CMyAsyncSocket ::OnSend(int nErrorCode)
    {
      while (m_nBytesSent < m_nBytesBufferSize)
      {
        int dwBytes;
    
        if ((dwBytes = Send((LPCTSTR)m_sendBuffer + m_nBytesSent, 
          m_nBytesBufferSize - m_nBytesSent)) == SOCKET_ERROR)
        {
          if (GetLastError() == WSAEWOULDBLOCK) break;
          else
          {
            TCHAR szError[256];
            wsprintf(szError, "Server Socket failed to send: %d", 
              GetLastError());
            Close();
            AfxMessageBox (szError);
          }
        }
        else
        {
          m_nBytesSent += dwBytes;
        }
      }
      if (m_nBytesSent == m_nBytesBufferSize)
        {
          m_nBytesSent = m_nBytesBufferSize = 0;
          m_sendBuffer = "";
        }
      CAsyncSocket::OnSend(nErrorCode);
    }
    

    mfg Emperor_L0ser



  • CAsyncSocket liefert dir zurück wenn die Verbindung getrennt wird.



  • ja, klappt wunderbar. danke 😃


Anmelden zum Antworten