Socket's
-
Hallo,
ich habe einen kleinen ChatServer geschrieben, und bin nun auf ein Problem gestossen, wie schaffe ich es das ich mehrere Ports frei gebe, oder wie schaffe ich es das mehrere Clients mit dem Server kommunizieren können. Der Server soll dann auch noch die möglichkeit haben Nachrichten an alle Clients zu senden und diese auch direkt anzusprechen, also das Handel des Clients kennen und über welchen Port er mit dem Server verbunden ist.Please help !!!!
-
Entweder:
http://codeguru.earthweb.com/network/NDK2.htmloder
Du speicherst alles Conncets in einer verketteten Liste.
-
Und wie schaffe ich das alle Connects in einer verketteten Liste abzuspeichern ???
Können den überhaupt mehrere User auf einen Port ???
-
Du solltest dich erst mit der Technik von C befassen bevor du mit verketteten Listen beginnst. Frage im C-Forum nach und lasse dir verkettet/doppeltverkettete Listen u.s.w erklären.
Weiter mit der Technik von TCP/IP und Socket bevor du ein Serverprogramm schreibst welches Multiclients aufnimmt.
(Nicht böse gemeint aber ein Programmierer sollte verstehen was er macht)Wenn sich ein Client mit einen anderen connectet dann auf eine IP und eine bestimmten port.(Geht auch Local)
Im Protocol wird dieser verbindung nun ein anderer freier Port zugewiesen. (Geht automatisch)
Jetzt kommunizieren beide Programme über den neuen Port und der Ausgangspoprt ist wieder frei.
Mit den verketteten Listen macht man das so in C++.
Man hat eine Clientklasse in der die Infos des Clients abgelegt werden. (Socket,etc.)
Nach einem connect erstellt man eine neue Instanz,übergibt den Socket und die anderen Infos an diese Klasse und in der verketteten Liste wird der Pointer zu dieser Klasse abgelegt.
Sendet der Cleint jetzt etwas an den Server weiß der Server noch nicht welcher Client das gesendet hat sondern hat (bei CAsyncocket) nur den Socket. Dieser wird in einer schleife mit den Clientinstanzen vergleichen. Sind beide gleich hat man auch die Info welcher Cleint das gesendet hat (z.B. Username)
Will man an alle senden dann in einer Schleife die Sockethandles holen und sockethandle->send machen.[ Dieser Beitrag wurde am 22.08.2002 um 14:21 Uhr von Unix-Tom editiert. ]
-
Original erstellt von Unix-Tom:
Du solltest dich erst mit der Technik von C befassen bevor du mit verketteten Listen beginnst. Frage im C-Forum nach und lasse dir verkettet/doppeltverkettete Listen u.s.w erklären.Hör nicht auf Unix-Tom.
Verkettete Liste, also Containerklassen sind DAS Paradebeispiel, wo man in C++ hübscheren Code macht als mit C.[ Dieser Beitrag wurde am 23.08.2002 um 10:00 Uhr von Unix-Tom editiert. ]
-
Original erstellt von Unix-Tom:
**Wenn sich ein Client mit einen anderen connectet dann auf eine IP und eine bestimmten port.(Geht auch Local)Im Protocol wird dieser verbindung nun ein anderer freier Port zugewiesen. (Geht automatisch)
Jetzt kommunizieren beide Programme über den neuen Port und der Ausgangspoprt ist wieder frei.
**Das stimmt so nicht ganz. Eine TCP/IP-Verbindung wird eindeutig durch 4 Größen bestimmt. Source-IP, Source-Port, Destination-IP und Destination-Port.
Um sich auf einen Server zu connecten, verwenden alle die gleich Dest.-IP und Dest.-Port. Es wird nach dem Connecten kein anderer Port vergeben. Die verschiedenen Verbindungen unterscheiden sich in Source-IP und SourcePort (bei mehreren Clientconnections von der selben IP nur durch den SourcePort). Der SourcePort wird in der Regel automatisch von der Winsock zugewiesen.
-
Original erstellt von volkard:
[quote]Original erstellt von Unix-Tom:
[qb]Du solltest dich erst mit der Technik von C befassen bevor du mit verketteten Listen beginnst. Frage im C-Forum nach und lasse dir verkettet/doppeltverkettete Listen u.s.w erklären.Hör nicht auf Unix-Tom.
Verkettete Liste, also Containerklassen sind DAS Paradebeispiel, wo man in C++ hübscheren Code macht als mit C.[/QUOTE]
Habe nicht gesagt das er verkettete Listen von c nehmen, sondern sich mit der Technik befassen soll.
[ Dieser Beitrag wurde am 23.08.2002 um 10:01 Uhr von Unix-Tom editiert. ]
-
Original erstellt von pfalzmarc:
**Das stimmt so nicht ganz. Eine TCP/IP-Verbindung wird eindeutig durch 4 Größen bestimmt. Source-IP, Source-Port, Destination-IP und Destination-Port.Um sich auf einen Server zu connecten, verwenden alle die gleich Dest.-IP und Dest.-Port. Es wird nach dem Connecten kein anderer Port vergeben. Die verschiedenen Verbindungen unterscheiden sich in Source-IP und SourcePort (bei mehreren Clientconnections von der selben IP nur durch den SourcePort). Der SourcePort wird in der Regel automatisch von der Winsock zugewiesen.**
Das es komplizierter ist als meine Erklärung darstellt ist mir klar.
Wie sollte man aber jemanden, der im Grunde nicht weiß was Sockets sind es sonst einfacher Erklären.