kleinen primitven chat

sra

Erfahrenes Mitglied
hallo

sicher gehe ich euch mit meinen fragen schon lange auf die nerven, aber was solls :D

ich mache mit einem kollgen zusammen in der schule ein projekt in c#. es geht darum einen kleinen chat aufzubauen.

das ganze soll ohne zentralen server laufen, ist also nicht für grosse useranzahl gedacht.

mein problem dabei ist die ganze geschichte mit dem netzwerk ;)

ich erwarte nicht, dass ihr mir ganze vorträge niederschreibt, über ports, und ip's und streams, und welche klassen des .net framework man brauchen kann...

aber so ein paar stichworte während schon nützlich, damit ich mich danach wenigstens weiss wonach in suchen muss.

danke im voraus
 
Hallo.

Wenn du nur ein paar Stichworte willst, sollst du sie bekommen:

# Socket
# ServerSocket
# Thread


Konkrete Fragen find ich irgendwie toller. ;)


Mfg,
Alex
 
lol

aso wenn du willst kannst gerne ein ganzes buch schreiben... aber danke erstmals... werde in die richtung mal googlen
 
Alex hat doch auch mal ein sehr brauchbares Tutorial dazu geschrieben (Remoting), ist ebenfalls empfehlenswert, wenn man sich mit solchen Dingen beschäftigen möchte. ;)
 
ich hab da ein paar intressante artikel gefunden, und hab mich bereits ein bisschen eingelesen.

was ich aber in allen bisherigen berichten vermisse ist, dass sie mir eine möglichkeit aufzeigen ohne server zu arbeiten, bzw server und client irgendwie zu vereinen.

oder muss ich wenn ich das ganze ohne (sichtbaren) server machen will einfach auf jedem pc einen kleinen server im hintergrund laufen lassen? würde das das netz nicht ein wenig zu fest auslasten?

oder sehe ich da ganz falsch? :)
 
Hallo.

Einen 'kleinen Server' muss es eigentlich immer geben, vorallem wenn mehr als 2 Personen chatten können sollen.

Welche Art von Chat soll es denn eigentlich werden?
Soetwas wie IRC, also mit verscheidenen Räumen in denen mehrere User sein können.
Wenn nur ein Channel existieren soll könntest du den Server auch in den Client einbauen sodass einer der Clients einfach die Serverrolle übernimmt.

Oder so wie ICQ, AIM, Jabber das man eine Unterhaltung nur mit einem anderen User führt? Hier bräuchtest du auch einen Server, denn irgendwo muss ja stehen welche User Online sind.

Vielleicht schilderst du mal genauer wie du dir deinen Chat vorgestellt hast.


// Alex
 
ok... dann mach ich mal.

Ich stelle mir den Chat so ähnlich wie irc vor. Es soll also nicht nur einen Raum geben, sondern theoretisch unendlich viele. Sprich wenn man einen Channel joint, den es noch nicht gibt wird dieser einfach erstellt.

Dazu habe ich mir gedacht mache ich so etwas wie eine Server/Userlist, welche an alle Clients geschickt wird (die sollen die Liste aber nicht einsehen können). In dieser Liste sollen alle bisherigen Channels mit den jeweiligen Users angegeben werden. Wenn also ein User einen Channel joinen will, wird erst mal in der Liste geschaut,. ob es den Channel schon gibt. Wenn ja geht beim User einfach ein neues Fenster auf, wo er die anderen User sieht, und die von den anderen Usern in diesem Channel geschriebenen Messages lesen kann. Gibt es den Channel noch nicht, Geht auch einfach ein Fenster auf.

Natürlich muss dann jeweils eine Art Broadcast an alle (das heisst an die Listen) raus, in der es heisst "Neuer Chanell" oder eben "Neuer User in Channel".

Bei jeder Message die man schreibt muss ich dann einfach noch als Anhängsel den jeweiligen Channel angeben.
Natürlich wird die Message aber nur an die IP's der User im jeweiligen Channel geschickt, und nicht an alle.

so... wenn ich nichts vergessen habe, dann ist das in etwa das gesamte Konzept.
 
Oke,

das ist dann genau das Programm an dem ich gerade für die Schule arbeite. :)
Allerdings in Java. Wollte dazu sogar ein Tutorial schreiben.

So wie du den Chat geplant hast ists wohl besser wenn du ne eigene Server Applikation erstellst.
Aber zuerst noch eine Frage. Willst du normale Netzwerkprogrammierung benutzen, also mit den ganzen Socket Klassen Listenern und so, oder gedenkst du .net Remoting zu verwenden?

Der Vorteil von Remoting ist, dass du dich nicht wirklich um ein Netzwerkprotokol kümmern musst, da du direkt Methoden des Servers ausführen kannst.

C# .net Remoting - Wie programmiere ich einen ChatServer - Das wäre ein Tutorial von mir dazu. Allerdings noch ohne Channel Support, den müsstest du dir dazubauen.

Überlege vielleicht mal welche Technik du verwenden willst.

Ich schildere aber mal kurz wie mein Chat in Java funktioniert.
Er besteht aus 2 eigenen Programmen, dem Server und einem Client.

Der Server lauscht auf einem bestimmten Port ob ein Client verbindet. Sollte jemand eine Verbindung aufbauen wird für diesen User ein neuer Thread gestartet.
Dort wird auf die erste Eingabe gewartet bis zu einem ';', das war dann die übermittelung des Nicknames. Also eine simple Login-Routine.
Danach verfällt der Thread in eine Endlosschleife und liest immer die Eingaben des Clients und wertet sie aus.
In verschiedenen Hashtables speichert der Server dann noch Daten zu Channels, die einzelnen Sockets der Clients, und die Threads.

Der Client verbindet nur zum Server und sendet Daten.

Das Protokoll zum Datenübertragen sieht ein wenig aus wie dies vom IRC, aber auch nur ein wenig.
Wenn der Client zum Beispiel 'Hallo ihr Clients' an den Channel 'test' schreiben möchte, sendet er folgendes an den Server:

MSG:#test:Hallo ihr Clients

Der Server schaut sich diesen String an, findet heraus das es eine normale Nachricht an einen Channel ist. Schaut welcher Channel gemeint ist, und sendet an jeden User im Channel den Nachrichtenstring. (In folgender Form)

MSG:#test:NicknamedesSenders:Hallo ihr Clients

Die Clients bekommen das und werten den String auch aus.

Also, das ein grober Überblick.
Hoffe er hilft in irgendeiner Form.

Mit .net Remoting müsstest du dich um diesen 'Befehlsstring' nicht kümmern.

Mfg,
Alex
 
Ich werd mir das ganze mal anschauen. Danke für den Tip.

Was meinen Chat von deinem unterscheidet, ist, dass ich wirklich ohne sichtbaren Server auskommen will. Der Chat soll in einem kleinen Netzwerk laufen, und dort habe ich keinen Server zur verfügung, und um es möglichst einfach zu halten will ich auch nicht dass der erste User (zum Beispiel) den Server stellt.

Das heisst es darf schon einen Server geben, der User darf davon aber nichts mitkriegen.

Ich hab mir schon überlegt, ob vielleicht jeder User einen Server haben soll. Dann würde es so aussehen, dass sich die Server untereinander verständigen, und der Client jeweils zu seinem Server verbunden ist.
 
Original geschrieben von sra
Ich werd mir das ganze mal anschauen. Danke für den Tip.

Was meinen Chat von deinem unterscheidet, ist, dass ich wirklich ohne sichtbaren Server auskommen will. Der Chat soll in einem kleinen Netzwerk laufen, und dort habe ich keinen Server zur verfügung, und um es möglichst einfach zu halten will ich auch nicht dass der erste User (zum Beispiel) den Server stellt.

Das heisst es darf schon einen Server geben, der User darf davon aber nichts mitkriegen.

Ich hab mir schon überlegt, ob vielleicht jeder User einen Server haben soll. Dann würde es so aussehen, dass sich die Server untereinander verständigen, und der Client jeweils zu seinem Server verbunden ist.

Du kannst Deinen Server ja eh "unsichtbar" machen. Das sollte ja wohl nicht das Problem sein. Aber ganz OHNE Server wirds nicht gehen. Oder willst Du das ganze Netzwerk dauerhaft scannen? :)

Ähm, aber wieso sollte jeder User seinen eigenen Server haben? Das macht man eigentlich nicht so ... wieso auch? :)
 

Neue Beiträge

Zurück