首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从接收CoAP包的C#中获取IP地址?

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

Stack Overflow用户
提问于 2018-10-08 08:19:01
回答 1查看 544关注 0票数 2

在C#中,我试图获取CoAP客户端的IP地址。这有可能吗?我尝试过查看我收到的exchange对象,但是我似乎找不到IP地址。

客户端

代码语言:javascript
复制
    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);
    }
}

服务器

代码语言:javascript
复制
        public Task<string> OpenAsync(CancellationToken cancellationToken)
    {
        try
        {
            _server = new CoapServer(_port);
            _server.Add(new MessageResource(_path);
            _server.Start();

        } catch (Exception ex)
        {
            throw;
        }
    }

消息资源(用于服务器)

代码语言:javascript
复制
 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地址。我试过检查exchange对象中的所有属性,但似乎找不到我可以使用的IP地址。

EN

回答 1

Stack Overflow用户

发布于 2018-10-08 08:54:36

显然,IP地址是在exchange.Request.Source.ToString()下面找到的。如果您从localhost (而不是127.0.0.1 )发送一个包,它只会说localhost,因此很难找到它。

代码语言:javascript
复制
"Uri uri = new Uri("coap://localhost:" + _port + "/" + "Test");"

编辑:同样,对于未来需要这样做的人来说:如果你只需要IP地址或端口,不要分割exchange.Request.Source。Visual自动生成exchange.Request.Source到端点。这应该是IPEndpoint,而不是端点,因为如果它是端点,则会丢失"Address“和"Port”属性。你可以这样修正它:

代码语言:javascript
复制
        if (exchange.Request.Source is IPEndPoint p)
        {
            //p.Address
            //p.Port
        }
        else
        {
            //Handle errors here
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52698094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档