Einige Fragen zu Sockets
-
Hallo zusammen
Ich habe eine Fragen bezüglich der in der .NET Klassenbibliothek vorhandenen Sockets:1. Was ist der Unterschied zwischen BeginConnect und ConnectAsync? Ich habe keine Antwort in der MSDN Dokumention auf diese Frage gefunden ?!?
2. Ich arbeite gerade an einem Studienprojekt und muss hierfür eine Softwarekomponente schreiben, welche eine TCP/IP - Verbindung zu einem anderen Rechner herstellt. Das besondere dabei ist nun, dass es für den Benutzer transparent sein soll, ob seine Applikation nun als Client oder als Server fungiert. Ich habe mir hierfür folgendes vorgestellt:
Nachdem der Benutzer die IP des Hosts, mit welchem er sich verbinden möchte, eingetippt hat, erstelle ich auf der einen Seite einen Serversocket, der auf eingehende Verbindungen des Partners hört und versuche aber gleichzeitig, eine Verbindung mit diesem aufzubauen. Derjenige, der zuerst eine Verbindung hergestellt hat (Server oder Client-Socket) wird also verwendet und der andere wieder geschlossen.
Ist dies eine sinnvolle Vorgehensweise oder macht man dies normalerweise anders?
3. Was passiert eigentlich, wenn ich BeginSend aufrufen und zur gleichen Zeit versucht mir der andere Host ebenfalls etwas zu senden? Gehen die Daten dann verloren oder wie ist das?
Lg Ishildur
-
1. Ich glaub das ist mehr oder weniger austauschbar. Kann sein dass ConnectAsync aus Kompatiblitätsgründen vorhanden ist...
2. Woher weiß der "andere" Host denn das du eine Verbindung aufbauen willst? Normal gibts einen "Lauscher" der hört ob eine Verbindung, von einem Client, aufgebaut werden soll und dann automatisch einen weiteren Socket erzeugt (auf Serverseite) um die Verbindung zum Client zu halten.
3. Nein, die Daten gehen bestimmt nicht (aus diesem Grund) verloren.
-
2. Naja, ich würde das ja auch nicht so implementieren, aber es ist nun mal Projektvorgabe, dass die Hosts automatisch aushandeln sollen, wer server und wer client ist.
3. Naja, ich war mir eben nicht sicher, ob man nicht einen separaten Socket für das senden, sowie für das empfangen benötigt, um gleichzeitig senden und empfangen zu können...
-
brauchst du nicht
-
Sehe ich das richtig, dass man EndConnect nur dann aufrufen sollte, wenn der Verbindungsaufbau erfolgreich was?
-
Ishildur schrieb:
Sehe ich das richtig, dass man EndConnect nur dann aufrufen sollte, wenn der Verbindungsaufbau erfolgreich was?
Nein.
Der Verbindungsaufbau wird mit EndConnect abgeschlossen, egal ob erfolgreich oder nicht. Die EndXxx Funktionen sind dafür zuständig evtl. diverse Resourcen freizugeben. z.B. muss ja irgendwann die Information ob es geklappt hat oder nicht aufgeräumt werden.Kannst du aber an ca. 1 Mio. Stellen im Inet nachlesen.
-
Mit gleichzeitig meine ich: Kann man auf demselben Socket in einem Thread Receive und parallel dazu in einem zweiten Thread Send aufrufen? Und werden diese Aktionen dann auch tatsächlich parallel ausgeführt (also nicht so, dass der thread von send in den wait zustand gesetzt wird, bis der read thread seine arbeit abgeschlossen hat)?
Ist das möglich mit nur einem einzigen Socket, oder benötige ich hierfür doch zwei separate?