gpt4 book ai didi

c# - 无法将套接字重新绑定(bind)到现有 IP/端口组合

转载 作者:行者123 更新时间:2023-11-30 12:19:21 25 4
gpt4 key购买 nike

您好,我正在尝试找到一种方法来从特定 IP/端口组合“解除绑定(bind)”套接字。我的伪代码如下所示:

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.

此时,.Net 通知我,我已经有一个绑定(bind)到 127.0.0.1:4567 的套接字,这在技术上是正确的。但无论我在 ClassA 的析构函数中放入什么代码,或者无论我在套接字上调用什么函数(我已经尝试过 .Close() 和 .Disconnect(true)),套接字仍然自豪地绑定(bind)到 127.0.0.1:4567。我该怎么做才能“解除绑定(bind)”套接字?


编辑:我不仅仅依赖垃圾收集(尽管我也尝试过这种方法)。我尝试调用 a.Close() 或 a.Disconnect() 然后才实例化 aa;这并不能解决问题。


编辑:我也尝试过实现 IDisposable,但如果我不调用该方法,代码就永远不会到达那里(这与之前的尝试等效,因为该方法只会尝试 .Close 和 .Disconnect)。让我尝试直接调用 .Dispose 并回复您。


编辑(大量编辑,抱歉):实现 IDisposable 并从“a”失去范围的地方调用 a.Dispose() 不起作用 - 我的 Dispose 实现仍然必须调用 .Close 或 .Disconnect(true)(或 .Shutdown(Both)) 但这些都没有取消绑定(bind)套接字。

如有任何帮助,我们将不胜感激!

最佳答案

(这就是最终让一切为我工作的原因)

确保A中的套接字连接到的每个套接字都有

socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress, true);

在启动时设置。

关于c# - 无法将套接字重新绑定(bind)到现有 IP/端口组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com