Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как задать имя хоста?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
inventor
Не совсем понятно в какую ветку мне поместить вот такой вопрос:

делаю прогу во FreeRTOS для ARM контроллера cc3200
мне нужно соединение по сети, где мой контроллер клиент WiFi точки доступа
от подсоединяется к ней, получает IP адрес по DHCP
далее он работает как UDP сервер и я могу его опрашивать
внешней программой - клиентом.
Проблема вот в чем - адрес, который назначается роутером
время от времени может меняться и в самом неприятном случае я вообще могу его знать.
Поэтому хотелось бы назначить для моего контроллеру какое то имя, по которому я мог бы к нему
обратиться, ну, например "centaurus":
Вот что я пишу в лог от контроллера

R 25-11-2015 11:07:40.047 INFO: Prog. ver: 0.04 from 25.11.15 11:07:40
R 25-11-2015 11:07:41.561 INFO: Device is configured in default state
R 25-11-2015 11:07:42.315 INFO: Device started as STATION
R 25-11-2015 11:07:42.840 [WLAN EVENT] STA Connected to the AP: NPO-NIK BSSID: 14:cc:20:2e:4e:d0
R 25-11-2015 11:07:42.973 [NETAPP EVENT] IP Acquired: IP=192.168.0.82 , Gateway=192.168.0.1
R 25-11-2015 11:07:43.754 INFO: SSID Name: NPO-NIK
R 25-11-2015 11:07:43.757 INFO: SSID Passwd: ******
R 25-11-2015 11:07:43.761 INFO: Sec Type: WPA2
R 25-11-2015 11:07:43.765 INFO: Connected OK
R 25-11-2015 11:07:43.769 INFO: Connection established w/ AP and IP is aquired
R 25-11-2015 11:07:43.776 INFO: Create Socket OK. Port: 10025
R 25-11-2015 11:07:43.782 INFO: Bind Socket OK

при соединениии с сервером на сс3200 передаю и получаю:

R 25-11-2015 11:08:05.212 SendTo (192.168.0.36)... OK
R 25-11-2015 11:08:07.754 SendTo (192.168.0.36)... OK
R 25-11-2015 11:08:10.417 SendTo (192.168.0.36)... OK
R 25-11-2015 11:08:12.977 SendTo (192.168.0.36)... OK
R 25-11-2015 11:08:15.537 SendTo (192.168.0.36)... OK
R 25-11-2015 11:08:18.301 SendTo (192.168.0.36)... OK

Вобщем, как мне сделать так, что бы не зная IP адреса к нему можно было бы обратиться по имени?
gerber
Цитата(inventor @ Dec 3 2015, 09:25) *
Вобщем, как мне сделать так, что бы не зная IP адреса к нему можно было бы обратиться по имени?

2 шага нужно сделать.
1) На роутере нужно закрепить фиксированный IP-адрес за конкретным клиентом (статическая таблица DHCP), если роутер это умеет.
2) Если хотите обращаться к серверу по имени - вам нужен DNS-сервер. Где он будет находиться - в роутере, или ещё где-то в сети, - отдельный вопрос. IP-адрес этого DNS-сервера нужно будет указать в настройках сетевого соединения клиента, с которого пойдут запросы к серверу.
inventor
Цитата(gerber @ Dec 3 2015, 09:48) *
2 шага нужно сделать.
1) На роутере нужно закрепить фиксированный IP-адрес за конкретным клиентом (статическая таблица DHCP), если роутер это умеет.
2) Если хотите обращаться к серверу по имени - вам нужен DNS-сервер. Где он будет находиться - в роутере, или ещё где-то в сети, - отдельный вопрос. IP-адрес этого DNS-сервера нужно будет указать в настройках сетевого соединения клиента, с которого пойдут запросы к серверу.

т.е. на стороне своей платы это не сделать?
AlexandrY
Цитата(inventor @ Dec 3 2015, 09:48) *
т.е. на стороне своей платы это не сделать?


А что в API сс3200 нет mDNS?
Странно, на CC3100 есть.

На стороне PC c Windows 7 должен быть запущен сервис Bonjour. В 10-ке он уже вроде штатный. У меня в 7-ке уже был откуда-то.
Под Android mDNS тоже работает как родной. С iOS тоже все понятно.

Вообщем нет никаких проблем.
inventor
Цитата(AlexandrY @ Dec 3 2015, 11:18) *
А что в API сс3200 нет mDNS?
Странно, на CC3100 есть.

На стороне PC c Windows 7 должен быть запущен сервис Bonjour. В 10-ке он уже вроде штатный. У меня в 7-ке уже был откуда-то.
Под Android mDNS тоже работает как родной. С iOS тоже все понятно.

Вообщем нет никаких проблем.

нашел этот микро DNA в примерах (микро надеюсь)
а как он работает, кто то может объяснить на пальцах?
AlexandrY
Цитата(inventor @ Dec 3 2015, 11:08) *
нашел этот микро DNA в примерах (микро надеюсь)
а как он работает, кто то может объяснить на пальцах?


А оно интересно? Главное что этим способом транслируется имя дивайса всей сети.
inventor
Цитата(AlexandrY @ Dec 3 2015, 12:54) *
А оно интересно? Главное что этим способом транслируется имя дивайса всей сети.

запустил эту прогу, но что то ничего не получилось


CODE
#ifdef MDNS_ADVERTISE
#define APPLICATION_NAME "mDNS Advertise"
#else
#define APPLICATION_NAME "mDNS Listen"
#endif

#define APPLICATION_VERSION "1.1.1"
#define SERVICE_NAME "CC3200._uart._tcp.local"


насколько понимаю теперь имя должно быть CC3200._uart._tcp.local
но почему то на пинг ничего не отзывается
AlexandrY
Цитата(inventor @ Dec 3 2015, 15:40) *
насколько понимаю теперь имя должно быть CC3200._uart._tcp.local
но почему то на пинг ничего не отзывается


Нет, имя задается вызовом функции API:
sl_NetAppSet (SL_NET_APP_DEVICE_CONFIG_ID, NETAPP_SET_GET_DEV_CONF_OPT_DEVICE_URN, strlen(URN_NAME), (unsigned char *) URN_NAME)

И будет оно в этом случае: <URN_NAME>.local
inventor
Цитата(AlexandrY @ Dec 3 2015, 20:45) *
Нет, имя задается вызовом функции API:
sl_NetAppSet (SL_NET_APP_DEVICE_CONFIG_ID, NETAPP_SET_GET_DEV_CONF_OPT_DEVICE_URN, strlen(URN_NAME), (unsigned char *) URN_NAME)

И будет оно в этом случае: <URN_NAME>.local

попробоввал - ничего не выходит
а как правильно вызвать эту функцию,
нужно ли перед ней вызывать sl_NetAppMDNSRegisterService?
Lagman
del
AlexandrY
Цитата(inventor @ Dec 4 2015, 15:46) *
попробоввал - ничего не выходит
а как правильно вызвать эту функцию,
нужно ли перед ней вызывать sl_NetAppMDNSRegisterService?


Ну потом еще надо включить сам сервис:

Код
#define MDNS_SERVICE_1     "PC1._ipp._tcp.local"
#define MDNS_TEXT_1           "vendor=TI"
#define MDNS_PORT_1           23
#define TTL                          2000
#define UNIQUE_SERVICE     1


   sl_NetAppStart(SL_NET_APP_MDNS_ID);
   sl_NetAppMDNSUnRegisterService(0, 0);
   sl_NetAppMDNSRegisterService(MDNS_SERVICE_1,pal_Strlen(MDNS_SERVICE_1),MDNS_TEXT_1,pal_Strlen(MDNS_TEXT_1),MDNS_PORT_1, TTL, UNIQUE_SERVICE);
inventor
Цитата(AlexandrY @ Dec 5 2015, 01:13) *
Ну потом еще надо включить сам сервис:

Код
#define MDNS_SERVICE_1     "PC1._ipp._tcp.local"
#define MDNS_TEXT_1           "vendor=TI"
#define MDNS_PORT_1           23
#define TTL                          2000
#define UNIQUE_SERVICE     1


   sl_NetAppStart(SL_NET_APP_MDNS_ID);
   sl_NetAppMDNSUnRegisterService(0, 0);
   sl_NetAppMDNSRegisterService(MDNS_SERVICE_1,pal_Strlen(MDNS_SERVICE_1),MDNS_TEXT_1,pal_Strlen(MDNS_TEXT_1),MDNS_PORT_1, TTL, UNIQUE_SERVICE);

сделал так - ничего не выходит
смотрю в роутере вместо имени стоит "?"
т.е. имя не присвоилось.
по ip адресу пингуется
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.