Laden...

C# LAN Chat ohne zusätzliche Server-Anwendung

Erstellt von PhaseV vor 7 Jahren Letzter Beitrag vor 7 Jahren 4.004 Views
PhaseV Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren
C# LAN Chat ohne zusätzliche Server-Anwendung

Hallo Community,

ich beabsichtige für meine WG einen Netzwerk-Chat zu programmieren, der keinen Server benötigt. Im Netz habe gelesen das dieses möglich ist und auch etwas komplizierter umzusetzen ist, nur leider habe ich nichts entdeckt wie man dieses Vorhaben umsetzen kann oder einfach falsch gegooglet =)

Vielleicht kann mir hier ja jemand behilflich sein, welche Themen ich mir dafür durchlesen sollte.

Ich danke schon mal im Voraus
PhaseV

T
2.224 Beiträge seit 2008
vor 7 Jahren

Ohne einen Server, der die Clients kennt und somit die Kommunikation umsetzt, wird es in der Tat etwas kniffliger.
Hier müssten deine Clients über das Netzwerk alle weiteren Clients über einen Fixen Port suchen.

Z.B. nutzt du dann TCP als Protokoll und als Port 55555
Dann müsste dein Client im Netz nach allen Rechner mit dem gleichen offenen Port suchen.
Erst dann weißt du welche Clients im Netzwerk sind.
Hier müssten deine Clients aber auch eine eigene Kennung liefern, damit sich bei einem IP Wechsel die Clients noch kennen.

Ob das ganze Sinn macht, da man sich in einer WG auch mal treffen könnte zum qutaschen, ist mal eine andere Sache :p
Ansonsten gibt es vielleicht noch ein paar Ansätze im Netz.
Hab sowas in der Art bisher nicht gebaut, deshalb habe ich hier auch keinen konkreten Ansatz.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

P
441 Beiträge seit 2014
vor 7 Jahren

Mit UDP Broadcast sollte das relativ simpel machbar sein.
Du müsstest nur zur Synchronisation (z.B. wer ist gerade online) von jedem immer mal wieder etwas verschicken.

16.835 Beiträge seit 2008
vor 7 Jahren

.. und nen UDP Broadcast wird i.d.R. von jeder Firewall geblockt.
Direktverbindungen oder Broadcasts müssen in Firewalls normalerweise immer via Ausnahme erlaubt werden. Über einen Server ist dies nicht notwendig (Hole Punching).

90 Beiträge seit 2009
vor 7 Jahren

@Abt:
Ist das so?
Ich verwende in einer meiner Anwendungen selbst einen UDP-Broadcast, und musste bisher auf keinem Rechner eine explizite Ausnahme erstellen.

Wenn ich mich so zurück erinnere, kann ich jedoch bestätigen dass meine Win10-Firewall gefragt hatte, ob ich der Anwendung vertrauen will. Eventuell hat dies automatisch eine Regel hinzugefügt?

Kumatin tanaki - Grabt den Klappstuhl aus!

16.835 Beiträge seit 2008
vor 7 Jahren

Ja das ist so und ja, die Windows Firewall erstellt bei dieser Frage automatisch eine Ausnahme (nicht für einen Port, sondern für den ganzen Prozess/Exe).

PhaseV Themenstarter:in
8 Beiträge seit 2016
vor 7 Jahren

Hallo,
danke erstmal für die Antworten und Hinweise. Habe mir jetzt unter anderem folgende Dokumentation durchgelesen:

TCP/IP Socket-Programmierung in C# - Multicast und Broadcast

Leider bekomme ich es nicht hin das sich die Clients in eine Liste (List<> chatClients) eintragen, als gedachte Connect-Methode, welche durch die Anwendung erstellt werden soll um den Nick, IP, Avatar, Status und so lokal zu Verwalten, also als User-Liste. Ich kann auch den Code nicht mehr zeigen, da ich diesen aus Frust wieder gelöscht hatte X(

Kann mir vielleicht jemand von euch für den Einstieg eine Hilfestellung geben?

D
22 Beiträge seit 2010
vor 7 Jahren

Hallo PhaseV,

für deine Idee eines lokalen Netzwerkchats solltest du zunächst beachten, dass jeder Rechner, der diesen Chat benutzt sowohl Server als auch Client ist. Das heißt alle Informationen an allen Rechnern, über vorhandene Nutzer des Chats usw., müssen überall gleich sein! Um das umzusetzen musst du dir, wie bereits vorgeschlagen, zunächst eine Methode (Multicast oder Broadcast) aussuchen, damit die Nutzer des Chats alle Informationen untereinander austauschen können. Wenn du eine Methode gefunden hast, schaust du, ob du Infos senden und von allen anderen, die das Programm verwenden, empfangen kannst. Dann nimmst du die empfangenen Informationen und speicherst sie am besten in einer dafür angelegeten Klasse z.B. "Contact", die so aussehen könnte:


public class Contact
{
private string Nick;
private IPAddress IP;
private string Status;
...

// Constructor
public Contact(string nick, IPAddress ip, string status)
{
   this.Nick = nick;
   this.IP = ip;
   this. Status = status;
...
}


// Getter und Setter

public iP
{
   get{return this.IP;}
   set{this.IP = value;}
}
.
.
.

}


Und dann zb als globale Liste :

 public static List<Contact> contacts = new List<Constact>()

LG die_pest