Daten senden (die Zweite) Ich verzweifle langsam.



  • Hi @all,

    ich möchte mit einem IRC-Server kommunizieren. Deshalb baue ich mir meinen eigenen Client (oder versuch es zumindest). :p
    Die Connection habe ich auch schon aufgebaut.

    m_socket.Create(); 
    m_socket.Connect("nexgo.de.eu.dal.net", 7000);
    

    Der Server antwortet mit:

    :arcor.de.eu.dal.net NOTICE AUTH :*** Looking up your hostname...
    :arcor.de.eu.dal.net NOTICE AUTH :*** Checking Ident
    :arcor.de.eu.dal.net NOTICE AUTH :*** Found your hostname

    Jetzt will ich Daten für die Anmeldung an dem Server senden:

    CString tempP = "PASS   \r\n"; // im Augenblick noch ohne Passwort
    m_socket.Send(LPCTSTR(tempP),sizeof(tempP)); 
    
    CString tempN = "NICK "; 
    tempN += m_strUser; 
    tempN += "\r\n";    
    m_socket.Send(LPCTSTR(tempN),sizeof(tempN)); 
    
    CString tempU = "USER ";
    tempU += ("shad 0 0: Thomas Albrecht\r\n");
    m_socket.Send(LPCTSTR(tempU),sizeof(tempU));
    

    Das ergibt in Klarschrift:
    PASS
    NICK Trikor
    USER shad 0 0: Thomas Albrecht

    Wenn ich das über Telnet sende wird die Verbindung aufgebaut und ich kann mit
    JOIN #Channelname einen IRC-Raum betreten/eröffnen.
    Das RFT 2812 verlangt auch diese Reihenfolge.
    Wenn ich das über meine socket-Funktion Send schicke bekomme ich erst einen Ping und dann einen Timeout. Also wird vermutlich irgendwas anders übertragen werden müssen. Aber wie???



  • Ping und dann einen Timeout

    ^^ da hast das problem doch 😉
    Du musst auf ein ping vom server auch richtig antworten



  • Das ist ja u.A. mit ein Problem.
    Auf ein PING muß ich mit PONG antworten.
    Ich bekomme vom Server :
    PING arcor.de.eu.dal.net
    und anworte.

    CString temp = "PONG arcor.de.eu.dal.net\r\n";
    m_socket.Send(LPCTSTR(temp),sizeof(temp));
    

    Aber der Server scheint es nicht zu nehmen.

    Und die Anmeldedaten werden direkt nach dem Connect versendet. Bis dahin kommt normalerweise noch kein PING



  • sizeof(temp)

    *hust*
    sizeof --> größe eines objects
    Ein sizeof(CString) wird so ca 4 zurückgeben, aber dieser wert hat absolut nichts mit der länge des strings zu tun der dem im CSrting steckt.
    Ich würde ein CString::GetLenght oder strlen((const char*)temp) verwenden, dürfe sicher aufschlussreicher über die anzahl der zu sendenden zeichen sein... 🤡



  • Ups, da hast Du wohl recht.
    Ich habs auch direkt umgestellt.
    Auf mein PONG reagiert der Server jetzt auch.
    Allerdings mit
    :arcor.de.eu.dal.net 451 PONG :Register first.
    Aber das Registrieren versuche ich ja mit

    CString tempP = "PASS   \r\n"; 
    	iLen = tempP.GetLength();
    	m_socket.Send(tempP,iLen);
    
    	// Nick übergeben (Username Leaguez)
    	CString tempN = "NICK ";
    	tempN += m_strUser;
    	tempN += "\r\n";
    	iLen = tempN.GetLength();
    	m_socket.Send(tempN,iLen);
    
    	// User übergeben (Eideutige UserID)
    	CString tempU = "USER ";
    	CString tempUsername = GetUsersName();
    	tempU += ("shad 0 0: Thomas Albrecht\r\n");
    	iLen = tempU.GetLength();
    	m_socket.Send(tempU,iLen);
    

    ich bekomme aber weiterhin
    :arcor.de.eu.dal.net NOTICE AUTH :*** No Ident response
    Why???



  • Manchmal ist die Lösung so leicht.

    Kleine Pause nach dem Connect und schon läufts. 🙄

    Trotzdem Danke an alle die mir geholfen haben/wollten. 😉


Anmelden zum Antworten