gpt4 book ai didi

c# - 如何从 C# 中的接收 CoAP 包中获取 IP 地址?

转载 作者:行者123 更新时间:2023-11-30 22:58:49 25 4
gpt4 key购买 nike

在 C# 中,我正在尝试获取 CoAP 客户端的 IP 地址。这可能吗?我已尝试查看收到的交换对象,但我似乎无法找到 IP 地址。

客户端

    class Program
{
private static string _port = "5683";

static void Main(string[] args)
{
Request request = new Request(Method.GET);

Uri uri = new Uri("coap://127.0.0.1:" + _port + "/" + "Test");
request.URI = uri;
byte[] payload = Encoding.ASCII.GetBytes("test");
request.Payload = payload;
request.Send();

// wait for one response
Response response = request.WaitForResponse();
Debug.WriteLine(response);
}
}

服务器

        public Task<string> OpenAsync(CancellationToken cancellationToken)
{
try
{
_server = new CoapServer(_port);
_server.Add(new MessageResource(_path);
_server.Start();

} catch (Exception ex)
{
throw;
}
}

消息资源(用于服务器)

 public class MessageResource : CoAP.Server.Resources.Resource
{
public MessageResource(string path) : base(path)
{
}
protected async override void DoGet(CoapExchange exchange)
{
try
{
var payload = exchange.Request.Payload;
if (payload != null)
{
exchange.Respond(payloadString);
} else
{
throw new Exception("Payload is null. No actor has been made.");
}
}
catch (Exception ex)
{
throw;
}
}
}

如您所见,我想接收发送消息的客户端的 IP 地址。我已尝试检查交换对象的所有属性,但我似乎无法找到我可以使用的 IP 地址。

最佳答案

显然,IP 地址位于 exchange.Request.Source.ToString() 下。如果您从 localhost 而不是 127.0.0.1 发送包,它只会说 localhost 并且更难找到。

"Uri uri = new Uri("coap://localhost:" + _port + "/" + "Test");"

编辑:此外,也许对于 future 需要此功能的人:如果您只需要 IP 地址或端口,请不要拆分 exchange.Request.Source。 Visual Studio 将 exchange.Request.Source 自动解析为 Endpoint。这应该是 IPEndpoint 而不是端点,因为如果它是端点,它会丢失“地址”和“端口”属性。您可以像这样修复它:

        if (exchange.Request.Source is IPEndPoint p)
{
//p.Address
//p.Port
}
else
{
//Handle errors here
}

关于c# - 如何从 C# 中的接收 CoAP 包中获取 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52698094/

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