|
You last visited: Today at 13:15
Advertisement
C# Chatserver
Discussion on C# Chatserver within the .NET Languages forum part of the Coders Den category.
05/24/2013, 19:36
|
#1
|
elite*gold: 0
Join Date: Sep 2008
Posts: 2,368
Received Thanks: 415
|
C# Chatserver
Hallo Leute,
ich habe folgende Frage, da ich für die Schule einen Chat Server in C# schreiben muss.
Und zwar geht es um folgendes ich habe einen TCP Server der auf einem Port lauscht, und bereits die erste Anfrage annimmt und bearbeitet. Er akzeptiert neue Clients und diese können sich schon einen Namen zu weisen.
Jetzt ist das Problem, dass jeder Client welcher auf dem Server verbunden ist eine Nachricht bekommen soll. Ich habe ein Klasse und darin die Methode für die Verbindung, welche folgendermaßen aussieht:
Aus einer meiner Klassen:
Code:
private void Run()
{
sw.AutoFlush = true;
sw.WriteLine("Hallo lieber Client!");
if (name == "unbenannt") // Ist der Standard Wert der Variable
{
sw.WriteLine("Gebe zunächst deinen Namen ein:");
}
sw.WriteLine("Wie heißt Du?");
name = sr.ReadLine();
if (name == "")
{
sw.WriteLine("Wenn du weiter möchtest gib deinen Namen ein:");
}
else
{
sw.WriteLine("Hallo " + name);
foreach (Verbindung v in verbindungen) // Dort liegt das Problem
{
string nachricht = sr.ReadLine();
sw.WriteLine(nachricht);
}
}
Code:
private void Run() {
Listener = new TcpListener(IPAddress.Any, PORT);
Listener.Start();
while (true) {
var client = Listener.AcceptTcpClient();
//verbindungen.Add(client);
var verbindung = new Verbindung(client, verbindungen);
counter++; // Bitte nicht beachten spielt keine Rolle
}
Ich denke ich muss, meine Clients einer Liste hinzufügen, und dann sagen jeder in der Liste soll die Nachricht empfangen.
Jedoch habe ich da anscheinend noch irgendwo ein Fehler, da mir gesagt wird, dass Verbindungen keinen Wert enthält und leider weiß ich nicht, wie man einen client dieser Liste hinzufügen soll
Die Liste:
Code:
List<Verbindung> verbindungen = new List<Verbindung>();
Vielen Dank.
MfG
|
|
|
05/24/2013, 20:08
|
#2
|
elite*gold: 0
Join Date: Feb 2010
Posts: 7,220
Received Thanks: 6,758
|
Wo ist das Problem deiner Liste etwas hinzuzufügen? Die Liste ist vom Typ "Verbindung".
Also wärs 'verbindungen.Add(verbindung);' - Oder wo hapert es bei dir?
|
|
|
05/24/2013, 20:13
|
#3
|
elite*gold: 0
Join Date: Sep 2008
Posts: 2,368
Received Thanks: 415
|
Ich glaube das Problem ist, dass ich die Klasse und Liste doof benannt habe, aber davon abgesehen kann ich Verbindung nicht einsetzen, weil das der Name der Klasse ist und nicht als Variable verwendet werden kann.
|
|
|
05/24/2013, 20:22
|
#4
|
elite*gold: 0
Join Date: Feb 2010
Posts: 7,220
Received Thanks: 6,758
|
Mir ist gerade erst aufgefallen, dass da ja gar nicht die selbe Methode ist in den beiden Spoilern
Habe dir mal eine PN geschickt, schau es dir am besten einfach mal an ;-)
|
|
|
05/24/2013, 20:57
|
#5
|
elite*gold: 0
Join Date: Sep 2008
Posts: 2,368
Received Thanks: 415
|
^Erstmal Vielen Dank für die Mühe.
Jedoch würde ich es gerne ohne Hashtable machen, gibt es dann noch eine andere Alternative?
MfG
|
|
|
05/24/2013, 20:59
|
#6
|
elite*gold: 0
Join Date: Feb 2010
Posts: 7,220
Received Thanks: 6,758
|
Warum möchtest du die Nachrichten überhaupt vom Clienten aus an alle senden?
Client -> Server -> All Clients
|
|
|
05/24/2013, 21:10
|
#7
|
elite*gold: 0
Join Date: Sep 2008
Posts: 2,368
Received Thanks: 415
|
Quote:
Originally Posted by SoNiice
Warum möchtest du die Nachrichten überhaupt vom Clienten aus an alle senden?
Client -> Server -> All Clients
|
Naja,
ich wollte den Server so aufbauen, dass es einen Channel gibt, in dem alle schreiben und die Nachrichten die ohne jegliche Befehle geschrieben werden, kann jeder lesen, also ein Broadcast innerhalb des Servers an die Clients.
Dann wollte ich das es eine /flüster Funktion gibt für einzel Gespräche.
Also ein Client --sendet Nachricht --> Server --> X
--> Y
--> Z
Ich hoffe das Problem was ich habe ist soweit klar, also wenn ich die Methode aufrufe und etwas schreibe dann bekommt nur der Client die Nachricht der diese auch geschrieben hat. Darum brauche ich eine Möglichkeit jeden Clienten der auf den Server ist anzusprechen.
Desweiteren wäre es ja schön eine Benachrichtigung zu haben für jeden neuen User Zugang. Also XYZ hat den Server betreten / verlassen.
MfG
|
|
|
05/24/2013, 21:31
|
#8
|
elite*gold: 0
Join Date: Feb 2010
Posts: 7,220
Received Thanks: 6,758
|
Du erstellst auf deinem Server eine Liste mit den Verbindungen, bei jeder eingehenden Verbindung fügst du eine neue in die Liste ein. Wenn der Server eine Nachricht vom Clienten empfängt überprüft dieser diese Nachricht auf einen bestimmten Parameter, wenn der nicht gesetzt ist, geht er die Liste durch und sendet an jeder User die Nachricht vom anderen User. Der Client empfängt diese und verarbeitet sie.
Ich verstehe nicht so ganz, was bei dir daran hapert.
|
|
|
05/25/2013, 14:01
|
#9
|
elite*gold: 0
Join Date: Sep 2008
Posts: 2,368
Received Thanks: 415
|
Quote:
Originally Posted by SoNiice
Du erstellst auf deinem Server eine Liste mit den Verbindungen, bei jeder eingehenden Verbindung fügst du eine neue in die Liste ein. Wenn der Server eine Nachricht vom Clienten empfängt überprüft dieser diese Nachricht auf einen bestimmten Parameter, wenn der nicht gesetzt ist, geht er die Liste durch und sendet an jeder User die Nachricht vom anderen User. Der Client empfängt diese und verarbeitet sie.
Ich verstehe nicht so ganz, was bei dir daran hapert.
|
Soo, erstmal vielen Dank. Ich habe es jetzt soweit geschafft, das Einzige Problem, was ich jetzt habe ist, dass nur jede Zweite Nachricht ankommt <.<
MfG
|
|
|
05/25/2013, 14:10
|
#10
|
elite*gold: 100
Join Date: Aug 2005
Posts: 595
Received Thanks: 208
|
Der Debugger ist dein Freund +g+
Entweder es ist ein Bug oder ein Logikfehler.
Ohne den Code können wir dir da schlecht weiterhelfen
|
|
|
05/25/2013, 17:05
|
#11
|
elite*gold: 0
Join Date: Sep 2008
Posts: 2,368
Received Thanks: 415
|
Quote:
Originally Posted by dready
Der Debugger ist dein Freund +g+
Entweder es ist ein Bug oder ein Logikfehler.
Ohne den Code können wir dir da schlecht weiterhelfen 
|
Code:
private void name() {
string name;
name = clientname; // Prüfen, ob Name bereits vergeben ist. Muss noch gemacht werden.
if (clientname == "unbenannt")
{
sw.WriteLine("Gebe zunächst deinen Namen ein:");
}
sw.WriteLine("Wie heißt Du?");
clientname = sr.ReadLine();
user(clientname);
if (clientname == "")
{
sw.WriteLine("Wenn du weiter möchtest gib deinen Namen ein:");
}
else
{
sw.WriteLine("Hallo " + clientname);
verbunden = true;
StreamWriter info;
foreach (TcpClient c in Liste)
{
for (int i = 0; i < Liste.Count; i++) // TCP CLient einen eindeutigen Name zuweisen
{
info = new StreamWriter(Liste[i].GetStream());
info.WriteLine(clientname + " hat den Raum betreten");
info.Flush();
info = null;
}
}
}
}
Dürfte vermutlich ein Logik Fehler sein.
Die Kommentare könnt ihr Ignorieren sind nur Infos für mich bzw. Sachen die noch zu machen sind.
Ich bin derzeit noch am überlegen, wie ich meiner TCP Liste eindeutig die Clientnamen zuweisen kann.
MfG
|
|
|
05/25/2013, 19:01
|
#12
|
elite*gold: 0
Join Date: Feb 2010
Posts: 7,220
Received Thanks: 6,758
|
Entweder bin ich blind oder du hast uns nicht die Funktion für's senden der Nachrichten gegeben.
|
|
|
05/25/2013, 19:44
|
#13
|
elite*gold: 0
Join Date: Sep 2008
Posts: 2,368
Received Thanks: 415
|
Quote:
Originally Posted by SoNiice
Entweder bin ich blind oder du hast uns nicht die Funktion für's senden der Nachrichten gegeben.
|
Code:
foreach (TcpClient c in Liste)
{
for (int i = 0; i < Liste.Count; i++) // TCP CLient einen eindeutigen Name zuweisen
{
info = new StreamWriter(Liste[i].GetStream());
info.WriteLine(clientname + " hat den Raum betreten");
info.Flush();
info = null;
}
}
Habe das nur etwas umgeschrieben, bis jetzt kriegt man also selbst auch noch die Nachricht, wie gesagt, wenn ich den TCP Client einen Namen zugewiesen habe, kann ich dies ja beheben und eine Flüster Funktion noch extra einbauen.
Also bis jetzt kriegt jeder im Chat die Nachricht.
|
|
|
 |
Similar Threads
|
Chatserver
05/18/2013 - General Coding - 4 Replies
Hallo,
ich hätte folgende Frage und zwar habe ich in C# einen Chat Client geschrieben nun denke ich darüber nach auch den dazu passenden Server zu schreiben, jedoch ist dies meiner Meinung nach nur sinnvoll, wenn dieser auch auf einem Ubuntu / Linux System ausgeführt werden kann.
Nun wüsste ich gerne, welche Programmiersprache sich da am ehesten anbietet, habe über PHP nachgedacht.
MfG
|
Minecraft Chatserver Bug
08/04/2012 - Minecraft - 2 Replies
Das ist wohl das Schlimmste , was einem ServerAdmin geschehen kann!
So siehts aus:
Man stoppt den Server beispielsweise per Webinterface oder per /stop
dabei wird jediglich der Server mit den Plugins heruntergefahren , der Rest ist noch ohne Plugins online und kann sich bewegen sowie Chatten, befehle funktionieren da auch nicht mehr.
Startet man den Server jetzt jedoch neu wird ein neuer ChatServer mit gestartet und der alte bleibt trotzdem an bis jemand den Prozess killt , was bei...
|
[C++] TCP Chatserver Paket
08/11/2011 - C/C++ - 10 Replies
Hi, liebe EPvP-Community.
Ich habe mir mit der Hilfe von Google, Foren, Downloads usw. einen pro TCP Server geschrieben, der als Chatserver dienen soll. Die Basis ist ja nun soweit fertig, aber mir fehlt jetzt noch die Paket-Methode(Das Protokoll zum Versenden der Informationen zwischen Client und Server). Hab damals nur in VB geschrieben, so wars dann egal, aber nun möchte ich es pro like machen(Google hat nichts dazu ausgespuckt). Also, wenn jemand Tipps usw. hat, post it!
|
Chatserver verbindung
07/27/2010 - S4 League - 6 Replies
wie kann man schnell die chatserver verbindung unterbrechen?^^
meistens wenn ich mit der Super hmg in einen raum gehe passiert das :o allerdings dauert dies viel zu lange :o
|
Aion Chatserver
07/19/2010 - Aion Private Server - 2 Replies
Guten Abend,
ich bin Teammitglied eines AionServers. Mich würde gern mal interrissieren, was man anstellen müsste um den Chatserver auf einen deutschen Aionserver im Gange zu bringen. Der server läuft auf der Version ist 1.9.x.x .
ICQ: 354-134-443
URL: Aion-Overhill
Dort ist mein Nick Buffy.
|
All times are GMT +1. The time now is 13:16.
|
|