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!
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.
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...
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.
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...
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.