Обнаружение ресурсов сервера Coap

Я использую библиотеку californium для совместной работы, и она развертывается на платформе Android. Я запустил coap-сервер на одном устройстве, а клиент на другом устройстве, оба находятся в одной сети.

Код сервера: создание сервера с указанным ниже ресурсом

class HelloWorldResource extends CoapResource {

    public HelloWorldResource() {

        // set resource identifier
        super("hello");

        // set display name
        getAttributes().setTitle("Hello-World Resource");
    }

    @Override
    public void handleGET(CoapExchange exchange) {

        // respond to the request
        exchange.respond("Hello Android!");
    }
}

Код клиента:

    CoapClient coapClient = new CoapClient("coap://localhost/.well-known/core");

    try {
        Set<WebLink> webLinks = coapClient.discover();
        System.out.println(webLinks.size());
    } catch (ConnectorException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

нет вывода из приведенного выше кода. Я не знаю IP-адрес и хочу связаться с сервером. это правильный путь или я что-то упускаю?


person Mohammed Shoeb    schedule 22.05.2021    source источник


Ответы (1)


Обнаружение — это специальный запрос на обнаружение ресурсов известного хоста.

Чтобы обнаружить хост, можно использовать многоадресный запрос, но он должен поддерживаться сервером.

localhost — это адрес самого устройства. При этом устройство отправит запрос на обнаружение самому себе.

Я не знаю IP-адрес и хочу связаться с сервером.

Если вы не знаете адрес, вы можете сначала использовать многоадресный запрос (требуется также подготовка на стороне сервера, см. Пример MulticastServer. Этот пример сложнее, чем вам нужно .Но демонстрирует и принципы). Или вам нужно найти этот адрес (android: настройки -> Подключения -> WLAN -> Настройки-Значок: там вы видите свой IP-адрес.

coapClient.discover()

Обнаруживает известный сервер, а не локальную сеть. Замените локальный хост на californium.eclipseprojects.io, и вы получите:

</.well-known/core>
</large> Large resource
    rt: [block]
    sz: [1280]
</large-create> Large resource that can be created using POST method
    rt: [block]
</large-post> Handle POST with two-way blockwise transfer
    rt: [block]
</large-separate> Large resource
    rt: [block]
    sz: [1280]
</large-update> Large resource that can be updated using PUT method
    rt: [block]
    sz: [1280]
</link1> Link test resource
    rt: [Type1, Type2]
    if: [If1]
</link2> Link test resource
    rt: [Type2, Type3]
    if: [If2]
</link3> Link test resource
    rt: [Type1, Type3]
    if: [foo]
</location-query> Perform POST transaction with responses containing several Location-Query options (CON mode)
</multi-format> Resource that exists in different content formats (text/plain utf8 and application/xml)
    ct: [0, 41, 50, 60]
</obs> Observable resource which changes every 5 seconds
    rt: [observe]
    obs:    []
</obs-large> Observable resource which changes every 5 seconds
    rt: [observe]
    obs:    []
</obs-non> Observable resource which changes every 5 seconds
    rt: [observe]
    obs:    []
</obs-pumping> Observable resource which changes every 5 seconds
    rt: [observe]
    obs:    []
</obs-pumping-non> Observable resource which changes every 5 seconds
    rt: [observe]
    obs:    []
</obs-reset>
</path> Hierarchical link description entry
    ct: [40]
</path/sub1> Hierarchical link description sub-resource
</path/sub2> Hierarchical link description sub-resource
</path/sub3> Hierarchical link description sub-resource
</query> Resource accepting query parameters
</seg1> Long path resource
</seg1/seg2> Long path resource
</seg1/seg2/seg3> Long path resource
</separate> Resource which cannot be served immediately and which cannot be acknowledged in a piggy-backed way
</shutdown>
</test> Default test resource
</validate> Resource which varies
    ct: [0]
    sz: [20]

Все полученные ссылки относятся к серверу, на который вы отправляете обнаружение.

person Achim Kraus    schedule 23.05.2021
comment
Сегодня я подготовил PR, чтобы добавить поддержку многоадресной рассылки в демо-версию californium для Android. См. для получения подробной информации или просто подождите немного, пока это не будет объединено. - person Achim Kraus; 15.06.2021