Liebe Grüße, ich versuche eine Möglichkeit zu finden, einen Socket von einer bestimmten IP/Port-Kombination zu "lösen". Mein Pseudo-Code sieht wie folgt aus:Ich kann einen Socket nicht an eine vorhandene IP/Port-Kombination binden
ClassA a = new ClassA(); //(class A instantiates socket and binds it to 127.0.0.1:4567)
//do something
//...much later, a has been garbage-collected away.
ClassA aa = new ClassA(); //crash here.
An diesem Punkt .Net mich darüber informiert, dass ich bereits einen Sockel bekam zu 127.0.0.1:4567 gebunden, die technisch wahr ist. Aber egal welchen Code ich in den Destruktor von ClassA lege oder egal, welche Funktionen ich beim Socket anrufe (ich habe .Close() und .Disconnect (true) versucht), der Socket bleibt stolz an 127.0.0.1:4567 gebunden. Was kann ich tun, um den Socket zu entbinden?
EDIT: Ich bin nicht allein auf Garbage Collection angewiesen Ich habe versucht, a.Close() oder a.Disconnect() aufzurufen und erst dann aa; Das löst das Problem nicht.
EDIT: Ich habe versucht, auch IDisposable Umsetzung, aber der Code bekam nie ohne mein Aufruf der Methode (das entspricht früheren Versuchen war das Verfahren, wie einfach .Close und .Disconnect versuchen würde). Lassen Sie mich versuchen. Rufen Sie direkt an und melden Sie sich an.
EDIT (viele Änderungen, Entschuldigungen): Implementieren von IDisposable und ruft a.Dispose(), von wo ‚a‘ Umfang verliert funktioniert nicht - meine Entsorgen Umsetzung noch nennen entweder .Close oder .Disconnect hat (true) (oder .Shutdown (Both)), aber keiner davon löst den Socket.
Jede Hilfe wäre willkommen!
Heißt das nicht, dass der vorherige Socket immer noch da ist und an den Port gebunden ist? http://msdn.microsoft.com/en-us/library/cc319473.aspx ReuseAddress Ein Wert, den Sie verwenden, um die Bindung an eine Adresse zuzulassen, die bereits verwendet wird. * ist * in Benutzung, nicht * wurde * – VolkerK
Volkerk; Ich denke, du hast recht. Hier müssen Sie vorsichtig sein und sicherstellen, dass die vorherige Instanz wirklich verschwunden ist. Berkley-Sockets warten standardmäßig 5 Minuten, bevor sie eine Port/Socket-Kombination freigeben. Dies ist die einzige Problemumgehung, die ich gefunden habe. – AlexeyMK