c++ Chat?

A

anfaengerbeimproggen

Hi!

Ich wollte mal fragen ob ein chat in c++ gut realisierbar ist(ich rede von so einer art Lan-ICQ,also nur fürs lan)

wäre auch dankbar für ein paar tipps wie ich das umsetzen kann,

danke im voraus
 
es lässt sich realisieren, ich progge den client unter winapi und den server als konsolenanwendung...
mein problem liegt beim handling, da der server ja mehrere clients gleichzeitig bearbeiten muss...
z.Z. stellt der server die clients in eine "warteschlange", sobald ein client disconnectet, kann erst der nächste bearbeitet werden :(

aber ich arbeite dran..
 
Für brauchbare Tips müstest du uns mal verraten welche
Umgebung du benutzt, also MFC, VCL QT etc.
Wenn du VCL, also Borland C++ Builder hast ist da ein
zielmlich gutes Beispiel Pjokect bei, das wird dir
weiter helfen!
Ansonsten
Hier!
Greetz...
Sinac
 
Hi Leutz!

Sucht doch mal nach dem Thema "Threads"... um euere Netzwerkapplikation Multiuserfähig zu machen... Threads stellen so etwas wie "leichtgewichtige" Prozesse,(auch gekapselte Anweisungsblöcke) dar d.h. sie Bilden einen Unterprozess in dem Prozess, in dem die Anwendung läuft. Dadurch, dass es möglich ist mehrere Threads zu erzeugen, kann man die Anwendung quasi "parallelisieren", so dass es der Chatserveranwendung in deinem konkreten Fall möglich ist "zeitgleich" mehrere Clients zu bedienen.

Stichwort "Multithreading"...

Gruss Tom
 
das ist was anderes ;)
meine cpu kann 2 threads gleichzeitig bearbeiten ja... aber es geht um das netzwerk.. der server soll die clients bearbeiten, d.h. er muss genau wissen, zu welchem socket und port er jetzt zu senden/empfangen hat, ohne das ich ihm das direkt sage... das geht evtl. mit select()
aber die syntax is mir davon nich ganz klar....:(
 
Threads ist schon der richtige Ansatz. Du hast z.B. eine Klasse VerbindungZumClient. Dieser übergibts du beim Aufruf den Port und die IP des Clients, damit du vom instantiierten Objekt aus eine TCP-Verbindung zum Client erstellen kannst. Jetzt ist es aber wichtig, dieses Objekt als Thread laufen zu lassen. Ein solcher Thread existiert unabhängig vom Programm und kann auch unabhängig auf den jeweiligen Client reagieren. Du erstellst also für jede eingehende ClientAnfrage einen neuen Thread der eine Verbindung zu diesem Client herstellt.
Programmiere zwar nur auf C#, mit C++ sollte dies aber auch gehen.
 
Original geschrieben von rook
das ist was anderes ;)
meine cpu kann 2 threads gleichzeitig bearbeiten ja... aber es geht um das netzwerk.. der server soll die clients bearbeiten, d.h. er muss genau wissen, zu welchem socket und port er jetzt zu senden/empfangen hat, ohne das ich ihm das direkt sage... das geht evtl. mit select()
aber die syntax is mir davon nich ganz klar....:(

Das ist der falsche Ansatz.

Der Server stellt auf Anfrage die Daten bereit und gibt den Client die Information wann dieser wieder anfragen soll.

Ich habe für ein Event einen MultiSpiele Server geschrieben der genau das tat.
Es ging darum 60 Clients mit kleinen Flashgames auf den Punkt zu starten. Die Punkte jener zu speichern und weitere Informationen zu veschiecken.
Programmiert wurde das mit ASP.net und als Datenformat wurde XML genutzt.
Ich habe den IIS als Server genutzt, da dieser wunderbar für gleichzeitige Anfragen ausgelegt ist.
Dadurcb das der Server dem Clienten eine neue Anfragezeit mitteilt kann mann dies über eine 3/4 Sekunde spannen und hat keine Probleme. Falls die Clients mehr werden vergrössert mann die Spanne und es können noch mehr clients bedient werden.
 
ich denk was ich gesagt hab, war schon richtig, auser.. das mit dem multithreading, hab ich kein plan bei cpp....

recv() wartet solang bis was empfangen wurde
send() wartet solange bis was gesendet wurde...
in der zeit passiert nichts mehr, das ist schlecht wenn ein anderer client hinzu kommt...
 
ja es nicht verkehrt vom technischen.

Nur es ist zu aufwendig alles über Socket laufen zu lassen.
Alles was mir klartext zu tun hat würde ich über http laufen lassen.

Grund:
1)Ein HTTP Server kann perfekt multithreaded Daten bereitstellen, ob das nun HTML ist oder aber die aktuelle diksussion eines chats ist egal.

2)Hat jede Sprache eine wunderbar einfache unterstützung für HTTP-Verbindungen.
Beispiel Java UrlConnection.

3) Gehen Verbindungen auf dem Port 80 durch jede firewall (normalerweise ;) weshalb die Chatuser da keine Probleme haben.

usw.

Zum Beispiel Webservices - SOAP läuft auch über HTTP aus eben solchen Vorteilen.

Ich wollte nicht sagen das deine Lösung falsch ist.
 
Ich hätte da noch eine Andere Anregung:
Warum das Rad neu erfinden? Such mal bissle bei http://www.google.de nach einem IRC-Server für Windows. Es gibt da definitiv einen. Denn ich hab auch schon etwas mit IRC rumexperimentiert.
Was du dann machen musst, ist noch einen geeigneten Client zu Programmieren oder du nimmst einen fertigen.
Wenn du dir aber doch einen eigenen Client programmieren willst, dann musst du dich nur ein wenig mit dem IRC-Protokoll auseinandersetzen, und machst dann deinen Client nach den Wünschen die du willst.
Möglichkeit wäre ein Admin-Client mit voller IRC-Funktionalität und ein "abgespeckter" für dein LAN.

Das nur mal so als Vorschlag.

Gruss Homer
 

Neue Beiträge

Zurück