ChatClient IRC
-
Kommt ganz drauf an, was du machen willst.
IRC ist ein bereits fertiges Chat-Protokoll (d.h. es steht fest, was die Clients den Server "fragen" sollen und auf welche Weise dieser antworten soll).Wenn du einen IRC-Clienten (also ein Programm, mit dem du mit einem IRC-Server kommunizieren willst wie z.b. mIRC) oder einen IRC-Server (ein Programm, dass eventuelle Anfragen der IRC Clienten annimmt) schreiben willst, musst du dich an das sogenannte IRC-Protokoll halten (also die Form, mit der Server und Client miteinander kommunizieren [z.B. muss der Client auf eine "ping"-Nachricht des Servers mit einem "pong"-Antworten, um dem Server zu signalisieren, das er noch da ist]). Schau dir in diesem Fall einfach mal das IRC-Protokoll an: http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc1459.html oder http://www.irchelp.org/irchelp/rfc/rfc.html
Was genau willst du denn für ein Chatprogramm schreiben?
Grüße Rapha
-
Ich möchte eine Chatfunktion, in der der Client einen Chatroom aussuchen und (wenn noch nicht voll max. 50 User) eintreten kann. Ist der Raum voll, soll er auf einen anderen Chatroom ausweichen. In die Chaträume kann man aber nur mit meinem Programm.
Zumindest stelle ich mir das so vor
-
Das macht es natürlich um einiges leichter

Das funktioniert folgendermaßen der Client und der Server schicken sich (z.B. mit der Klasse CSocket) Zeichenketten hin und her, die der jeweils andere auswertet.
z.B. könnte ein solches Gespräch
folgendermaßen aussehen(C = Client S = Server):C: NAME "Raphael"
S: OK
S: CHATTRÄUME {("Computerspiele", 8), ("C++", 9)}
*Anmerkung: ich habs mir so gedacht: immer "("+ Chatroomname+ ","+Anzahl der User im Chatroom + ")"*
C: WÄHLE_CHATRAUM "C++"
S: OK
C: WELCHE_CHATTER_SIND_ONLINE
S: CHATTER_ONLINE "Raphael|Trikor|Raphael_original|Trikor_original"
C: MSG_TO "Trikor" "Tolles Protokoll, oder?"Ist nur ein spontanes Beispiel von mir. Wie die Unterhaltung
aussieht, musst du dir selber überlegen
(als Anregung kannst du dir ja mal die Mailprotokolle SMTP und POP3 anschauen).Grüße Rapha
-
Hi Rapha,
das ganze wird wohl doch über IRC gehen.
Hab da auch ne echt starke Seite gefunden. Die lohnt sich wirklich
http://www.irc-mania.de/index.phpSeh ich das richtig, das ich quali eine ganz normale Socketverbindung mit nen IRC-Server aufbaue und dann die Daten über Strings übergebe.
z.B.
USER IRC_USER 0 0: Realname
NICK Trikor
JOIN #Trikorchat
Privmsg #Trikorchat Hallo leuteund dann über m_sMySocket.Listen() die Strings entgegennehme um die Nachrichten der anderen Chatter in meinem Editfeld zu schreiben?
-
100%ig richtig

Ich denke es gibt einige vorgefertigte IRC-Klassen, schau dich da mal um.Grüße Rapha
-
Wo???????
-
z.B. hier: http://www.codeguru.com/network/irc.html
Grüße Rapha
-
Hi Rapha,
die Klasse ist nicht ohne. Ich sitz jetzt schon seit Stunden, wie der Ochs form Berg und versuche mich in den Klassen einzulesen.
Wenn ich das richtig sehe, werden inbool CIrcSession::Connect(const CIrcSessionInfo& info)die Daten für die Connection übergeben. Deshalb wollte ich eine protected Variable vom Typ const CIrcSessionInfo& namens m_ircAnmeldung anlegen.
Dann m_ircAnmeldung füllenm_ircAnmeldung.sServer = "nexgo.de.eu.dat.net"; m_ircAnmeldung.iPort = 7000; // usw.und anschließen aufrufen
CIrcSession::Connect(m_ircAnmeldung);Mein Programm erkennt aber anscheinened const CIrcSessionInfo& obwohl ich irc.h in meine CHauptDlg.h includiert habe.
Was mach ich falsch?
-
Nene, das & ist eine Refferenz

Einfach eine Variable vom Typ CIrcSessionInfo erstellen (kann temorär sein) und als Parameter übergeben ( angenommen m_Session ist eine Variable vom Typ CIrcSession:CIrcSessionInfo SessionInfo; /* SessionInfo hier mit Werten füllen */ m_Session.Connect(SessionInfo);Grüße Rapha
-
CIrcSessionInfo SessionInfo;Hab ich auch schon probiert. Da sagt er mir immer nichtdeklarierter Bezeichner.
Die CIrcSessionInfo ist ne struct in irc.h
Und die irc.h habe ich in meiner CHauptDlg.h schon includiert.
Warum funktioniert das nicht?
-
Haste mal alles bereinigt und alles neu erstellt?
Ansonsten musst du irgendwas übersehen haben.Grüße Rapha
-
Alles bereinigt, fehler beibt. Vieleicht siehst Du ihn ja. Ich seh schon den Wald vor lauter Bäumen nicht.
Meine Hauptdlg.h
//{{AFX_INCLUDES() #include "mediaplayer2.h" #include "wmpplayer5.h" #include "irc.h" #include "MD5Checksum.h" #include "xShadeButton.h" //}}AFX_INCLUDES ... class CHauptDlg : public CDialog { // Konstruktion public: CIrcSession m_Session; //wird nicht erkannt void SetChatLogin(); void Groessenanpassung(); CWnd* pMedia; CWnd* pBild; BOOL MsgSenden(CString Msg, BOOL Ok_Abbruch); CStringArray m_strChannel; CString m_strPasswortV; CString m_strAnmeldung; CString GetHttpSource(CString URL); CHauptDlg(CWnd* pParent = NULL); // Standard-KonstruktorDie irc.h
#include "socket.h" #include "HauptDlg.h" #include <string> #include <vector> #include <map> #include <set> #include "CrossThreadsMessagingDevice.h" ... struct CIrcSessionInfo { String sServer; String sServerName; unsigned int iPort; String sNick; String sUserID; String sFullName; String sPassword; bool bIdentServer; String sIdentServerType; unsigned int iIdentServerPort; CIrcSessionInfo(); CIrcSessionInfo(const CIrcSessionInfo& si); void Reset(); }; //////////////////////////////////////////////////////////////////// class CIrcDefaultMonitor; // foreward class CIrcSession { public : friend class CIrcDefaultMonitor; CIrcSession(IIrcSessionMonitor* pMonitor = NULL); virtual ~CIrcSession(); // usw.Da er ja auch CIrcSession m_Session; in der HauptDlg.h nicht erkennt, muß irgendwas beim includieren schief gehen. Aber was???
-
Kann es sein, dass ich die Klasse nicht benutzen kann, weil die Klasse für eine MDI-Anwendung geschrieben wurde?
Mein Programm ist Dialogfeldbasierend.
-
Huhu !
Probier mal diese Zeile in deiner Hauptdlg.h: using namespace irc;
Gruss, Joe
-
Joe schrieb:
Probier mal diese Zeile in deiner Hauptdlg.h: using namespace irc;
Danke Joe, das war´s.
Und dir natürlich auch, Rapha.
