Laden...

TCP Chat - Kleines Problem

Erstellt von xxtachxx vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.794 Views
X
xxtachxx Themenstarter:in
13 Beiträge seit 2013
vor 10 Jahren
TCP Chat - Kleines Problem

Hallo Leute,

ich versuche mich seit kurzer Zeit an einem TCP Chat in C#. Dazu hab ich mir schon unzählige Videos auf YouTube angesehen, aber es gibt immer ein Problem. Und zwar jeder Teilnehmer, selbst wenn es nur einer ist muss den Port freischalten um schreiben zu können.

Vor ein paar Tagen habe ich ein Projekt gefunden wo allerdings nur der Server, also der Hauptrechner den Port freischalten musste und alle anderen einfach so mit der IP-Adresse joinen konnten.

Darum wollte ich fragen ob da einer eine Idee hat. Wäre echt nett wenn ihr mir helfen könnt. Falls es so Threads schon gibt könnt ihr mir bitte den Link senden oder Vorschläge wonach ich suchen kann, weil ich finde dazu einfach überhaupt nichts.

Viele Dank schon mal
euer xxtachxx

16.832 Beiträge seit 2008
vor 10 Jahren

Wo ist das Problem, was für eine Idee?
Das eine ist eben Peer-to-Peer und das andere eine Client-Server-Architektur. Was verstehst Du da jetzt nicht?

E
10 Beiträge seit 2013
vor 10 Jahren

Um ne Verbindung aufzubauen müssen ja generell ne Adresse und Port angegeben werden. Je nach Firewall muss dann der entsprechende Port auch freigegeben werden.

16.832 Beiträge seit 2008
vor 10 Jahren
  • Bei P2P bei allen Clients
  • Bei Client-Server nur beim Server.
X
xxtachxx Themenstarter:in
13 Beiträge seit 2013
vor 10 Jahren
  • Bei P2P bei allen Clients
  • Bei Client-Server nur beim Server.

Ah ich habs glaube ich verstanden. Ich such jetzt noch mal ein bisschen ansonsten melde ich mich noch mal

X
xxtachxx Themenstarter:in
13 Beiträge seit 2013
vor 10 Jahren

Jetzt weis ich wieder wo das problem war.

Also: ich muss beim server nen port freischalten. Dann kann ich vom client daten an den server schicken. Aber wie kann ich daten vom server an den Client senden ohne beim Client einen port freischalten zu müssen

709 Beiträge seit 2008
vor 10 Jahren

Hallo,
sobald sich ein Client mit dem Server verbunden hat, kann ihm der Server alles schicken, was er will.

Gruß
pinki

175 Beiträge seit 2010
vor 10 Jahren

Hallo,

ich glaube Du hast die Grundlagen von TCP/IP nicht so wirklich verstanden und daher kommen auch Deine Verständnisprobleme..... Ich versuche es mal in wenigen Worten....

Also grundsätzlich kannst Du Dir eine TCP-Verbindung vorstellen wie ein Telefonat. Wenn Du jemanden anrufst und zu ihm sprichst (--> TCP-Verbindung zum Server aufbauen und Daten senden), dann kann der Angerufene (--> Server) ja auch mit Dir sprechen - er braucht Dich nicht auf einer anderen Leitung anrufen... Im Fachjagon nennt man das eine "Voll-Duplex-Verbindung". Beide Teilnehmer können reden und hören (--> senden und empfangen) und zwar gleichzeitig über die gleiche Verbindung.

Was nun den Port betrifft - Wenn Du zum Server eine Verbindung aufbauen willst, dann musst Du doch zunächst erst einmal einen Socket erstellen. Ein Socket ist ein Kommunikationsendpunkt und in TCP/IP-Netzwerken nichts weiter als die Kombination (Tupel) von IP-Adresse und Portnummer. Wenn Du beim Erstellen des Sockets keine Portnummer angibst (was man beim Server allerdings auf jeden Fall machen sollte, denn der soll ja eben auf einer fest definierten Portnummer Verbindungen entgegen nehmen), dann sucht das System selbst eine nicht verwendete Portnummer für Dich raus.

Oder mal ganz platt ausgedrückt: Sobald Du einen Socket erstellt und Dich mit dem Server verbunden hast, ja genau dann hast Du auch lokal einen Port aufgemacht. In den TCP-Paketen die zwischen Server und Client gesendet werden sind die Portnummern (die vom Server und Client) festgehalten - aus diesem Grund weiss der Server auch ganz genau, an welchen Port bei Dir er die Daten senden muss. Der Komfort bei der ganzen Sache ist jedoch, dass den Server das aber alles gar nicht interessiert, weil das TCP/IP das alles erledigt. Der Server (damit meine ich die Software, nicht das Stück Hardware!) kennt im Grunde nur die Verbindung zum Client - aber welche IP und/oder Portnummer am Ende steht weiss er nicht (oder genauer: braucht er nicht zu wissen - er kann es aber durchaus ermitteln/rausfinden wenn er das will).

Ist vielleicht jetzt etwas klarer geworden....

Bye,
Michael

Debuggers don't remove Bugs, they only show them in Slow-Motion.

4.221 Beiträge seit 2005
vor 10 Jahren

@m.knigge

Beim Server soll er eine fixe Portnummer verwenden... beim Client eine dynamische (kommt in deinem Beitrag nicht ganz rüber... ansonsten gut beschrieben).

  1. Server macht Port auf z.B: 6667
  2. Client erstellt Socket (oder TcpClient) ohne Angabe des ports und verbindet zu Server:6667
  3. Client und Server kommunizieren nun über die etablierte Verbindung

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...