Laden...

Problem mit TcpListner und TcpClient ...

Erstellt von icedre vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.593 Views
I
icedre Themenstarter:in
106 Beiträge seit 2006
vor 17 Jahren
Problem mit TcpListner und TcpClient ...

Hi,

Ich möchte einen Instant Messenger in C# schreiben (für's private LAN) und hab mich nun mal ein wenig in die System.Net.Sockets eingelesen...
Ich hab die folgenden Beispiele schon versucht, welche auch hervorragend funktionieren:
TcpListner
und
TcpClient
... Jetzt möchte ich das aber so machen, das sich die Clients am Server anmelden und der Server eine Liste führt, in der alle Clients gelistet werden (mit allen nötigen Infos), die online sind, also die sich am Server angemeldet haben. Die Clients sollen dann diese Liste beim einloggen auf dem Server abrufen und können sich somit mit anderen Clients im Netzt verbinden... Ich denke, das ist die "normal Lösung". Wenn ich hier schon einen Denkfehler hab, dann bin ich für Korrektur dankbar =) ... Jetzt fehlt mir nur noch der "Anstoss", wie ich das mit der Liste und den nötigen Informationen hin bekomm... Hoffe ihr könnt mir ein wenig weiterhelfen.
Vielen Dank!

T
94 Beiträge seit 2006
vor 17 Jahren

hallo,

das musste mit asynchronen sockets machen. musst also auf tcpclient/tcplistener verzichten 😉

http://www.codeproject.com/cs/internet/socketsincs.asp hier wird genau erklärt was du willst
sockets frage (irc verbindung) und hier nochmal ein link der dir wahrscheinlich auch weiterhelfen wird.

das sollte erstmal genug lesestoff sein ;D

mfg

If you don't like me for who I am, then you don't like me for who I am, but all you're gonna get, is who I am.

C
366 Beiträge seit 2005
vor 17 Jahren

Das kannst du schon mit TCPClient machen.

Du musst dir hald ein "Kommunikationsprotokoll" überlegen, dass der Server z.B. wenn er "1111" o.ä. empfängt dir alle Clients zurückschickt und z.B. bei "2222#4#Message" die Message an Client 4 schickt.

So in der Art kommuniziere ich zw. Client und Server und das funktioniert ganz gut...

T
94 Beiträge seit 2006
vor 17 Jahren

dann haste aber im client nen tcplistener und tcpclient laufen. die beispiele, die ich bisher in so ner konstruktion gesehn hab, hatten dann immer sowas wie "while (true) {}" oder "listener.pending thread sleep" oder ähnliches. alles würde zu performance verlust führen (hatte ich zumindest das gefühl)! das problem haste bei asynchronen sockets nicht.

solltest du dich gegen asynchrone sockets entscheiden kannste ja mal das hier angucken: [Tutorial] Client-/Server-Komponente über TCP-Sockets

mfg

If you don't like me for who I am, then you don't like me for who I am, but all you're gonna get, is who I am.

C
366 Beiträge seit 2005
vor 17 Jahren

Original von thejudge
dann haste aber im client nen tcplistener und tcpclient laufen.

Nein, im Server 😉.

Aber das ist nur für das Anmelden neuer Clients und beeinflusst die Performance nicht oder nicht spürbar.
Denn wähernd dem Pending schäft der Thread ja und braucht eigentlich gar keine Systemleistung.
Meine TCP-Kommunikation ist aufjedenfall schneller als die Routine, welche die Pakete zerlegt und analysiert...

1.378 Beiträge seit 2006
vor 17 Jahren

Ich hab auch 1 Chat programmiert: 1. Versuch war mit Remoting + Callbacks was im Netzwerk prima funktioniert hat, aber darüber hinaus nicht wegen Routern die Callbacks nicht zulassen.

beim 2.Versuch war auch ein TCPListener/Client im Einsatz.

Habe auch mit einem eigenen Protocoll gearbeitet, der Server allerdings dieses "Protokoll" ausgewertet und die Message nur an den gewünschten Client, oder an alle gesendet.

Hat auch ganz gut funktioniert.