gpt4 book ai didi

c# - UdpClient 接收广播地址

转载 作者:可可西里 更新时间:2023-11-01 08:55:02 25 4
gpt4 key购买 nike

在 c# 中,我正在使用 UdpClient.Receive 函数:

public void StartUdpListener(Object state)
{
try
{
udpServer = new UdpClient(new IPEndPoint(IPAddress.Broadcast, 1234));
}
catch (SocketException ex)
{
MessageBox.Show(ex.ErrorCode.ToString());
}

IPEndPoint remoteEndPoint = null;
receivedNotification=udpServer.Receive(ref remoteEndPoint);
...

但是我收到一个套接字异常,提示地址不可用,错误代码为 10049我该怎么做才能否定此异常?

最佳答案

这是我目前在一个有效的生产应用程序中使用的一些代码的要点(我们有一些额外的代码来处理客户端是服务器应用程序在独立安装上运行的情况)。它的工作是接收消息已准备好进行处理的 udp 通知。正如 Adam Alexander 所提到的,您唯一的问题是您需要使用 IPAddress.Any,而不是 IPAddress.Broadcast。只有当您想要发送广播 UDP 数据包时,您才会使用 IPAddress.Broadcast。

设置udp客户端

this.broadcastAddress = new IPEndPoint(IPAddress.Any, 1234);
this.udpClient = new UdpClient();
this.udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
this.udpClient.ExclusiveAddressUse = false; // only if you want to send/receive on same machine.

并使用回调触发异步接收的开始。

this.udpClient.Client.Bind(this.broadcastAddress);
this.udpClient.BeginReceive(new AsyncCallback(this.ReceiveCallback), null);

希望这对您有所帮助,您应该能够使其适应同步工作而不会出现太多问题。与您正在做的非常相似。如果在此之后您仍然遇到错误,那么一定有其他东西正在使用您尝试监听的端口。

所以,澄清一下。

IPAddress.Any = 用于接收。我想监听到达任何 IP 地址的数据包。IPAddress.Broadcast = 用于发送。我想向正在收听的任何人发送一个数据包。

关于c# - UdpClient 接收广播地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/746519/

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