Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » CSocket::Receive() ? Probleme beim Empfang

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
29.09.2004, 15:48 Uhr
~mou
Gast


Hallo Ihrs

Ich muss für einen Freund ein kleines Prog schreiben, welches eine Verbindung zu einem
Telnet daemon (Linux) herstellt.
Dazu habe ich mir gedacht wäre die CSocket Klasse ziemlich gut geeignet. Habe das in mein Prog dann eingebaut ...und es funktionierte nicht... Eine Verbindung mittels Connect() kommt zustande, jedoch erhalte ich beim ersten Aufruf von Receive() einfach nur Müll, statt der Begrüssungsmeldung. Nach dem zweiten Aufruf bleibt Receive sogar gänzlich hängen.

Auch eine direkte Programmierung über die WinSock API Funktionen liefert mir den selben Müll...?!


C++:
             unsigned char receivedBuffer[256];
    int length = 0;
    int counter = 0;

    CSocket loggerSocket;
    loggerSocket.Create();
    NetworkDebug(CString("Create"), loggerSocket.GetLastError());

    if ( !loggerSocket.Connect((LPCTSTR)servername, 23) ) {
                       NetworkDebug(CString("Connect"), loggerSocket.GetLastError());
        return FALSE;
    }

    if ( (length = loggerSocket.Receive(receivedBuffer, 256)) == SOCKET_ERROR ) {
        NetworkDebug(CString("Receive()"), loggerSocket.GetLastError());
        return FALSE;
    }
    
    receivedBuffer[length] = 0;
    MessageBox(NULL, (LPCTSTR)CString(receivedBuffer), (LPCTSTR)CString("Empfangenes"), 0);

    loggerSocket.Close();

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.09.2004, 09:42 Uhr
Airdamn



Das Empfangen solltest Du dann machen, wenn eine OnReceive Message eingegangen ist.
Also eine Klasse ableiten von CSocket, dann OnReceive überschreiben und in der Methode Daten empfangen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.09.2004, 11:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


falsch, nur bie CAsyncSocket muss man das so machen, CSocket ist blockierend, d.h wenn man Receive aufruft wartet es solange bis es daten bekommt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.09.2004, 21:20 Uhr
~mou
Gast


Es ist wie wenn das ganze als Unicode interpretiert wird... Gibt es eine Möglichkeit dies abzuschalten, so das normaler 8Bit ASCII Code verwendet wird?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.09.2004, 22:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


poste mal was rauskommt und poste mal was rauskommen hätte sollen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.09.2004, 22:45 Uhr
~mou
Gast


Rauskommen sollte eigentlich das:
Telnet Server
login:

Herauskommen tut dies:
zwei "y", das erste mit zwei Pünktchen obendran, das zweite mit einem Strich auch obendran wie das französische "é". Am Schluss noch ein Prozentzeichen.
Habe jetzt gerade auf www.msdn.com gelesen, dass es zu Schwierigkeiten kommen kann, wenn man versucht ein MFC Prog mit einem nicht MFC Prog zusammen zuarbeiten. Wobei deren "Abhilfe" mittels "htons()" usw. mir auch nicht weiterhilft.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_windows_sockets.3a_.byte_ordering.asp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
01.10.2004, 12:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja das ist das was dir das telnet-programm dann anzeigt, kann es nicht sein, das der server beim connect erstmal einen "command" schickt, also z.b 3bytes oder so? schau dir mal den source einen telnet-clients an, bzw such eine telnet-protokoll-spezifikation
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
01.10.2004, 15:01 Uhr
~mou
Gast


Da hast Du wohl recht... Als ich eine Verbindung zu einem FTP Server machte, erhielt ich eine Begrüssungsmeldung im Klartext. Hm, also RFC auswendig lernen *maul*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.10.2004, 20:04 Uhr
~_tobi_
Gast


Hallo,
ich habe nicht viel Ahnung aber bringt es vielleicht was, wenn du statt


C++:
receivedBuffer[length] = 0;



mal


C++:
receivedBuffer[length] = '\0';



versuchst ? Oder sollte das das gleiche sein??

Habs nur gut gemeint

Tobi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: