Benutzer mit den meisten Antworten
C# Chatverbindung (TCP)

Frage
-
Hallo Community,
Ich gehe nun seit 2 Jahren auf eine HTL und mein ehr Geiz lässt nicht nach ein C# Chat zu scheiben. Bis jetzt hat alles prima funktioniert, doch nun würde ich gerne den Clienten über einen Server laufen lassen. Was ich so mitbekommen habe ist es am besten wenn ich ihn über TCP laufen lasse, doch irgendwie bekomme ich das nicht ganz hin. Ich habe mir mehrere Chats runtergeladen nur alle haben nicht wirklich funktioniert, da der andere Nutzer keine Nachrichten erhalten hat.
Meine Frage: Könnte mir irgendwer "grob" so etwas schreiben das wenn ich etwas schreibe nicht nur in meiner RichTextBox1 steht sondern das dann jeder lesen kann, bzw mir jemand ein gutes Tutorial vorschlagen postet, da meine Ergebnisse bis jetzt nicht ganz so toll waren.
PS: Den Client habe ich bis her nur in Forms geschrieben habe, da ich mich mit WPF noch nicht richtig beschäftigt habe.
Mfg.
Antworten
-
Also die Fehlermeldung kommt, weil Du mit mehreren Threads arbeitest und alle Zugriffe auch Steuerelemente der GUI müssen aus dem UI Thread kommen. Das Problem ist komplett unabhängig vom "Verbindungsaufbau klappt nicht" zu sehen. Und immer erst ein Problem nach dem anderen lösen - evtl. geht es ja schon, wenn das Problem gelöst ist.
Dies kannst Du mittels Invoke Aufrufe umgehen.
http://msdn.microsoft.com/de-de/library/a1hetckb.aspx
Der Link zeigt den Invoke Aufruf mittels eines Delegates.Ich selbst neige dazu, die "Business" Logik von der GUI zu trennen. Business Logik wäre dann hier die Kommunikation mit dem Server und die GUI zeigt das nur an. Somit wäre da eine Art "ChatConnection" Klasse. Diese hätte dann dso Methoden wie Connect und Send und wenn neue Nachrichten kommen, dann wäre dies ein Event "NewMessageArrived" oder so. Und da die GUI weiss, dass es ene Multi-Threaded Applikation kann man beim subscribe das schon handhaben:
http://konradn.wordpress.com/2011/04/27/events-in-multithreaded-windows-forms-applications/Bezüglich meinem Link zu CodeProject in meiner ersten Antwort:
Den Code zum Artikel kannst Du oben herunter laden ("Download Source") - direkt unter den Sternchen mit der Artikelbewertung.
Mit den besten Grüßen,
Konrad
- Als Antwort markiert Stefan Kleinewillinghoefer Freitag, 29. März 2013 09:09
Alle Antworten
-
Hi,
Beispiele gibt es im Netz sehr viele. Und die meisten sollten auch funktionieren. Evtl. ist es am einfachsten, wenn Du uns ein oder zwei Beispiele nennst und die Probleme, die Du damit hattest.
Ich würde ansonsten fast vermuten, dass Du ein grundsätzliches Problem hast und es nicht am code selbst liegt. Daher wären auch Informationen ganz gut a.la. Wo lässt Du den Server wie laufen? Können die Clients den Server wirklich problemlos erreichen?
Ansonsten wäre mein Vorschlag ein Chat-System von CodeProject a.la. http://www.codeproject.com/Articles/16916/A-Chat-Application-Using-Asynchronous-TCP-Sockets
With kind regards,
Konrad
-
Danke für deine Hilfe, genau das was du geschickt hast ist super, nur wenn ich beim Login den Port "127.0.0.1" zB eingebe dann kommt eine Meldung und anschließend erscheine ich weder in der Liste mit den Online Usern noch kommt eine Nachricht an.
Folgende Nachricht kommt:
Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement txtLog erfolge von einem anderen Thread als dem Thread, für den es erstellt wurde.
Und komischer weiße, kann daran liegen das ich blind bin, aber ich finde den Code des Programms nicht. o.0
Und das hauptsächliche Problem ist, dass das mit der Verbindung nicht klappt und ich rein nur meine eigenen Nachrichten lesen kann.
Mfg.
-
Also die Fehlermeldung kommt, weil Du mit mehreren Threads arbeitest und alle Zugriffe auch Steuerelemente der GUI müssen aus dem UI Thread kommen. Das Problem ist komplett unabhängig vom "Verbindungsaufbau klappt nicht" zu sehen. Und immer erst ein Problem nach dem anderen lösen - evtl. geht es ja schon, wenn das Problem gelöst ist.
Dies kannst Du mittels Invoke Aufrufe umgehen.
http://msdn.microsoft.com/de-de/library/a1hetckb.aspx
Der Link zeigt den Invoke Aufruf mittels eines Delegates.Ich selbst neige dazu, die "Business" Logik von der GUI zu trennen. Business Logik wäre dann hier die Kommunikation mit dem Server und die GUI zeigt das nur an. Somit wäre da eine Art "ChatConnection" Klasse. Diese hätte dann dso Methoden wie Connect und Send und wenn neue Nachrichten kommen, dann wäre dies ein Event "NewMessageArrived" oder so. Und da die GUI weiss, dass es ene Multi-Threaded Applikation kann man beim subscribe das schon handhaben:
http://konradn.wordpress.com/2011/04/27/events-in-multithreaded-windows-forms-applications/Bezüglich meinem Link zu CodeProject in meiner ersten Antwort:
Den Code zum Artikel kannst Du oben herunter laden ("Download Source") - direkt unter den Sternchen mit der Artikelbewertung.
Mit den besten Grüßen,
Konrad
- Als Antwort markiert Stefan Kleinewillinghoefer Freitag, 29. März 2013 09:09
-
Hallo Bashesz,
wenn Dir die Antwort von Konrad geholfen hat, markiere sie bitte als Antwort.
Grüße,
Stefan Kleinewillinghoefer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwicklern“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden koennen.
-
Hallo Bashesz ,
Wir gehen davon aus, dass die Antwort weitergeholfen hat.
Wenn ja, wäre es hilfreich wenn Du diese Lösung bestätigen würdest, sodass andere Leute in der selben Situation hiervon auch profitieren können.
Wenn nicht, neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.Grüße,
Stefan Kleinewillinghoefer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwicklern“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden koennen.