gpt4 book ai didi

C#从UDP消息中获取发件人地址

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:50 25 4
gpt4 key购买 nike

我有一个嵌入式以太网接口(interface) (Lantronix XPort),它使用其识别信息响应 UDP 广播。

我能够多播“魔术包”并且监听器正确接收数据报,但是我还需要找出发送该响应数据报的 IP 地址。如果是 TCP,我会使用 socket.RemoteEndPoint,但是当应用于 UDP 套接字时会引发异常。

public class Program
{
public static void Main(string[] args)
{
// magic packet
byte[] magicPacket = new byte[4] { 0, 0, 0, 0xf6 };

// set up listener for response
Socket sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

// EDIT: Also, had to add this to for it to broadcast correctly
sendSocket.EnableBroadcast = true;
IPEndPoint listen_ep = new IPEndPoint(IPAddress.Any, 0);
sendSocket.Bind(listen_ep);

// set up broadcast message
EndPoint send_ep = new IPEndPoint(IPAddress.Parse("192.168.255.255"), 30718);
sendSocket.SendTo(magicPacket, magicPacket.Length, SocketFlags.None, send_ep);

DateTime dtStart = DateTime.Now;
while (true)
{
if (sendSocket.Available > 0)
{
byte[] data = new byte[2048];
// throws SocketException
//IPEndPoint ip = sendSocket.RemoteEndPoint as IPEndPoint;
sendSocket.Receive(data, SocketFlags.None);
if (data.Length > 4)
{
PrintDevice(data);
}
}

if (DateTime.Now > dtStart.AddSeconds(5))
{
break;
}

Console.WriteLine(".");

Thread.Sleep(100);
}

// wait for keypress to quit
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}

有什么想法吗?是否有更好的策略来读取可以让我确定远程 IP 地址的响应数据报?

编辑:

就像典型的那样,我在 SO 上发帖的那一刻,我就会有一个清晰的时刻。

原来我可以这样做:
                EndPoint remote_ep = new IPEndPoint(IPAddress.Any, 0);
// Use ReceiveFrom instead of Receieve
//sendSocket.Receive(data, SocketFlags.None);
sendSocket.ReceiveFrom(data, ref remote_ep);

而 remote_ep 现在包含远程端点信息!

最佳答案

看看ReceiveFrom而不是 Receive,它将让您传递对 Endpoint 的引用。

关于C#从UDP消息中获取发件人地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609689/

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