Socketproblemchen bei OnReceive(?)



  • Hi!
    Ich habe ein kleines Programm geschrieben welches die Sockets, wie es in "Visual C++ 6 in 21 Tagen" bei Tag 20 beschrieben wird, verwendet.

    Also connecten, senden umd empfangen nach diesem Muster:

    //Connecten
    	m_sConnectSocket.Create();
    	m_sConnectSocket.Connect(m_strAddress, m_intPort);
    
    //Senden
    CString strMyMessage;
    int iLen;
    int iAmtSent;
    .
    .
    .
    iLen = strMyMessage.GetLength();
    iAmtSent = m_sMySocket.Send(LPCTSTR(strMyMessage), iLen);
    if (iAmtSent == SOCKET_ERROR)
    {
    // Hier Fehlerbehandlung durchführen
    }
    else
    {
    // Alles OK
    }
    
    //Empfangen
    char *pBuf = new char[1025];
    int iBufSize = 1024;
    int iRcvd;
    CString strRecvd;
    
    iRcvd = m_sMySocket.Receive(pBuf, iBufSize);
    if (iRcvd == SOCKET_ERROR)
    {
    // Hier Fehlerbehandlung durchführen
    }
    else
    {
    pBuf[iRcvd] = NULL;
    strRecvd = pBuf;
    // Nachricht weiterverarbeiten
    }
    

    Der Code den ich für diese Programmteile geschrieben hab, stimmt sicherlich. Da bin ich mir wirklich sicher. Das Problem muss außerhalb dieses Codebereichs liegen.

    Nun zu dem eigentlichen Problem..
    Ich kann über Textfelder und Schaltflächen mein Clientprogramm zu einem Server verbinden und einzelne Kommandos an ihn schicken. Die Rückmeldungen des Servers die bei mir eingehen, stelle ich in einem weiteren Textfeld dar.
    Connecte ich also anhand von IP-Adresse und Port-Nummer zu einem Server auf dem irgendein Dienst läuft, werde ich z.B. mit einer Nachricht begrüßt. (Wenn man dabei z.B. an einem Mailserver denkt)
    Die Begrüßung unmittelbar nach dem Connecten wird bei mir auch Problemlos übertragen und dargestellt. Das einzige was nicht funktioniert ist, dass ich auf Kommandos keine Rückmeldung bekomme. Z.B. schicke ich "help" an den Server und erwarte eine entsprechende Antwort vom Server. Die kommt aber nie bei mir an. Mit einem Diagnose-Tool (Commview) konnte ich feststellen dass das versenden des Kommandos erfolgt,..im Code sieht auch alles richtig aus. Nur eine Antwort geht nicht im Programm ein. Mit Commview stellte ich aber fest, dass der Server eine entsprechende Antwort an mich sendete!!

    Also.. das "Receiven" funktioniert unmittelbar nach dem Connecten. Das Senden des Kommandos funktioniert auch. Eine entsprechende Antwort wird an mich geschickt. Die OnReceive-Funktion wird aber nicht aufgerufen. (<- Das konnte ich durch entsprechende MessageBoxes feststellen)

    Ich danke für jeden Beitrag und hoffe, dass ich nicht unter Niveau poste.
    Gesucht habe ich, auf dem Board und mit Google.

    Vielen Dank im voraus!



  • Das senden wir bei dir auch gehen. Verschiedene Dienste erfordern aber mehr als einen String über den Socket.
    z.B. erfordert TELNET ein Abschlusszeichen (\n für NEWLINE)



  • Boa, na klar!
    Ich muss vorrübergehend geistig verwirrt gewesen sein!

    Danke Unix-Tom! Du hast den Durchblick!
    -> Problem gelöst 🙂


Log in to reply