gpt4 book ai didi

C# UDP 套接字绑定(bind)异常

转载 作者:行者123 更新时间:2023-12-03 12:01:35 25 4
gpt4 key购买 nike

我正在尝试为无线网状网络创建一个程序(除了名称之外的所有内容)。大多数网络将处理 TCP 消息传递,但要确定所有邻居 IP(因为它们在启动时将是未知的),我选择使用 UDP 广播作为初始发现消息。在大多数情况下,该代码是无关紧要的,因为初始测试似乎有效,目前我不调用它。

以下是接收和注册邻居IP的部分。

protected override void ReceiveMessageUDP()
{
while (live)
{
try
{
UdpListener = new UdpClient(_PORTRECEIVE);
UdpListener.EnableBroadcast = true;
Socket socket = UdpListener.Client;
IPEndPoint endPoint1 = new IPEndPoint(IPAddress.Loopback, _PORTRECEIVE);
IPEndPoint endPoint2 = new IPEndPoint(IPAddress.Any, _PORTRECEIVE);
socket.Bind(endPoint2);
socket.Listen(25);
Socket connected = socket.Accept();
byte[] buffer = new byte[1024];
int length = connected.Receive(buffer);

IPAddress remoteIP = ((IPEndPoint)connected.RemoteEndPoint).Address;
if (!ipAddresses.Contains(remoteIP))
ipAddresses.Add(remoteIP);

Message.Add(Encoding.ASCII.GetString(buffer, 0, length));
}
catch (SocketException e) { Console.WriteLine(e.ErrorCode); }
catch (Exception) { }
}
}

我已经使用两个 IPEndPoints 进行了测试,无论我如何设置它,绑定(bind)都失败并出现 SocketException.ErrorCode 10022 Windows Socket Error Codes .这是一个无效的参数,但我对这意味着什么感到困惑,因为所需的参数是一个端点。

这在第一次运行时失败,所以它不像我试图重新绑定(bind)端口。

最佳答案

您已经将端口绑定(bind)到 UdpCLient当你 build 它时。然后不能将同一个端口绑定(bind)到单独的 IPEndPoint .

UdpListener = new UdpClient(_PORTRECEIVE);  // binds port to UDP client
...
IPEndPoint endPoint2 = new IPEndPoint(IPAddress.Any, _PORTRECEIVE);
socket.Bind(endPoint2); // attempts to bind same port to end point

如果你想这样做,构建并绑定(bind) IPEndPoint然后构造 UdpClient用它代替端口。
IPEndPoint endPoint2 = new IPEndPoint(IPAddress.Any, _PORTRECEIVE);
socket.Bind(endPoint2); // bind port to end point

UdpListener = new UdpClient(endPoint2); // binds port to UDP client via endpoint

我不知道您为什么还要设置另一个端点 endPoint1在同一个端口。如果您尝试使用它,这可能会导致问题。

关于C# UDP 套接字绑定(bind)异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4139747/

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