C#.NET / Chat

StageZero

Grünschnabel
Hallo zusammen,

mir wird nun die Aufgabe zuteil mit Hilfe von C#.NET und ASP.NET einen Chat zu realisieren. Meine erste Idee war, die Beiträge der Mitglieder einfach in eine Datenbank schreiben zu lassen (MS SQL Server) und dann jede Sekunde die Daten vom Server neu auszulesen. Das erscheint mir aber ein wenig unelegant.
Hat da jemand bessere Vorschläge für mich wie ich sowas realisieren könnte ohne fremde Komponenten zu benutzen?
 
Hallo.

Hast du "genaue" Vorgaben was du verwenden musst, beziehungsweise, wie es ablaufen soll?
Das mit dem in die Datenbank schreiben, und immer neu laden ist wrklich nicht schön.

MfG,
Alex
 
C# / Chat programmieren

Hallo,

erstmal danke, dass Du Dich mit meinem Problem beschäftigst.

Der Chat soll eigentlich ganz einfach aufgebaut sein. Ein Fenster in dem alle Beiträge aller Mitglieder angezeigt werden sowie eine Mitgliedliste wer anwesend ist. Die Sache mit den hinterlegten Profilen bekomme ich schon irgendwie hin, denke ich.
Ausserdem wäre es schön, wenn die Benutzer noch Schriftart und Farbe wählen könnten. Eigentlich genau so ein Ding wie man es zu Hauf im Internet findet aber eben nicht auf Javabasis oder sowas sondern einzig und alleine als Servercontrol mit ASP.NET und C#.
 
Soll also soetwas werden wie der Cassiopeia Chat? (Zu bewundern wäre dieser zum Beispiel bei http://chat.orf.at)

Da würde ich Vorschlagen, das du alle Userrelevanten Daten in einer Datenbank speicherst, und diese dann mittels ASP.net bereitstellst.
Also der Login, die Userpages und so weiter.

Für den Chat solltest du dann allerdings eine Applikation erstellen, welche eine Verbindung zum Client aufbaut und diese nicht sofort beendet, sodass du immer wieder Text zum Client streamen kannst.
 
Eine tolle Idee...

Hallo,

nochmals vielen Dank für Deine Mühen. Deine Idee hört sich toll an...

Aber wie kann man sowas generell machen? Ich möchte eigentlich nicht, dass der Benutzer irgendwas runterladen muss...
 
Müsste er auch nicht.

Ich schneide mal grob den Aufbau des eigentlichen Chatservers an.

Der Server lauscht auf einem Port auf eingehende Requests von Usern. Verbindet sich ein User bekommt dieser vom Server zuerst ein Frameset gesendet.
Ein Frame enthält die Chatnachrichten (oben) der andere ist nur ein kleiner mit einem Eingabefeld (oder mehreren, egal, kannst auch für bestimmte Optionen dort was platzieren.)

Das was im oberen Frame geladen wird, löst beim Chatserver einen neuen Thread aus der für das Senden der Chatnachrichten verantwortlich ist. Die Verbindung die dahinter steckt darf nicht beendet werden. Sonst kannst du nichts mehr an den Client übertragen ohne das er nochmal eine Seite aufruft.

Wenn das Formular des unteren Frames abgesendet wird, muss dein Chatserver in der Lage sein die übermittelten Daten aus dem HTTP-Request auszulesen, verarbeiten, und wenn nötig an alle verbundenen Clients den Text schicken (über den einen Kanal der wir uns offen gelassen haben).

Du musst allso folgendes beherrschen damit du das realisieren kannst:
  • Das HTTP Protokoll
  • Threads
  • TcpListener / TcpClient Klassen

Noch ein paar Hinweise.
Die im Browser aufgerufene Datei muss bei deinem Server nicht unbedingt existieren, kann ja nur eine fake Datei sein, die gewisse Funktionen in deinem Server auslösen.
Zum Beispiel wenn ein Request an eine "output.html" Datei kommt, muss der Server ja nicht diese öffnen und an den Client senden, sondern kann ja bewirken das dieser Request (bzw. die Antwort auf den Request) den Thread auslöst, der dann später für das Senden der Daten zuständig ist.

Ich hoffe du weisst was ich meine,
habe vor einigen Monaten schonmal sowas ähnliches geschrieben.
 
C# / Chat programmieren

Hallo...

Danke, ich werde mich damit morgen erstmal rumschlagen und gucken wie weit ich komme. Ich hatte schon befürchtet, dass ich um die Socket-Geschichten nicht drum rum komme.
Ich wünsche Dir eine gute Nacht und angenehme Ruhe und werde Dich sicherlich in den nächsten Tagen noch weiter belästigen... :)
 
Hehe. Ist mit C# nicht schwer. Schau dir einfach mal die TcpListener und TcpClient Klassen an.
Wennst fragen hast, kannst ja ruhig hier posten. :)
 
Chat... :-(

Hallo...

Also, ich habe das nun entsprechend umgesetzt.
TcpClient-Klasse läuft in einem Thread, verbindet sich mit einem TcpListener, der das Broadcasting der Messages übernimmt. Das klappt soweit auch, denke ich. Zumindest werden die Textboxes der Clients mit den richtigen Werten befüllt. Nun werden die clientseitig aber nicht automatisch aktualisiert wenn ich zum Beispiel die Anweisung
tbChatMessages.Text = tbChatMessages.Text + NewMessage;
schreibe... Wie mache ich das?
 
Wie meinst du?

So wie das kingt, denke ich, dass du erwartest, dass sobald du den Inhalt der TextBox änderst, sich auch der Text bei den anderen ändert.

Du musst schon den Text im entsprechenden Format, so wie es dein Server erwartet, an den Server senden, und dieser muss es dann an die anderen Clients verteilen.
 
Zurück