помогите победить dns.getHostByName
- Войдите на сайт для отправки комментариев
Втр, 18/09/2012 - 01:19
Не могу ресолвить IP адрес с помощью dns.getHostByName. Что я делаю не так?
#include <SPI.h> #include <Ethernet.h> #include <EthernetUdp.h> #include <Dhcp.h> #include <dns.h> #include <OneWire.h> #include <avr/wdt.h> // Enter a MAC address for your controller below. // Newer Ethernet shields have a MAC address printed on a sticker on the shield byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 }; byte ip[] = { 192,168,1,201 }; byte gateway[] = { 192,168,1,1 }; byte subnet[] = { 255, 255, 255, 0 }; unsigned int localPort = 7777; unsigned int time; unsigned int timetotemp=0; unsigned int timetonexttemp=360; // 360 unsigned int timetoping=0; unsigned int timetonextping=60; // 60 unsigned int connectattempts = 0; char serverName[15] = "www.google.com"; char* kHostname = "www.google.com"; byte server[4]; // = { 64, 233, 187, 99 }; // Google EthernetUDP Udp; EthernetClient client; byte remote_ip[] = {192, 168, 1, 156}; // Address of target machine unsigned int remote_port = 6800; OneWire ds(5); int i=1; char buf[60]; // void setup() { wdt_enable(WDTO_8S); // watchdog 8 sec Serial.begin(9600); pinMode(3, OUTPUT); digitalWrite(3, LOW); pinMode(4, OUTPUT); // start the Ethernet connection: wdt_reset(); // Ethernet.begin(mac, ip, gateway, subnet); // ручная настройка if (Ethernet.begin(mac) == 0) {Serial.println("Failed to configure Ethernet using DHCP"); for(;;) ;} // no point in carrying on, so do nothing forevermore,reboot with watchdog Serial.println(Ethernet.localIP()); // print your local IP address: Udp.begin(localPort); // // DNSClient dns; int ret = dns.getHostByName(kHostname, server); // // // }
1. Плата обычная, arduino uno + arduino ethernet W5100 , все стандартное.
Хочу от стандартной библиотеки Ethernet ресолвить IP, например google.com. И да, мне не надо присоединяться к этому ip, мне именно надо получить его IP, чтобы потом посылать туда upd пакеты. В описании сказано, что после вызова client.connect(server,port) автоматом ресолвится ip по имени, но как?
Что выдает компилятор:
lan_standart_board:49: error: no matching function for call to 'DNSClient::getHostByName(char*&, byte [4])'
E:\arduino\libraries\Ethernet/dns.h:30: note: candidates are: int DNSClient::getHostByName(const char*, IPAddress&)
Что, вообще никто не сталкивался с использованием динамического IP и необходимостью на этот динамичский IP отослать куда-нибудь? Не предполагал наличия телепатов, но людей, которые ковыряли стандартную Ethrenet либу найти надеялся.
2. вачдог работает отлично. Что впрочем никак не отражается на невозможности компиляции.
"Все стандартное" - понятие очень растяжимое. Вопросы связанные с Ethernet модулями на enc2j60 - сейчас не менее редки (если не более часты).
Не предполагал наличия телепатов, но людей, которые ковыряли стандартную Ethrenet либу найти надеялся.
Продалжаете предполагать. Даже люди которые "ковырялись" нем могут знать в чем же у вас трабла. Может железные проблемы, может настройки, может проблемы питания....
А оказывает - компилятор ругает (догадайтесь сами что говорит). Вы к доктору тоже приходите с "доктор что-то мне фигово, вы же людей лечили, неужели не знаете что со мной?"
Как можно было догадатся что у вас компиляция не проходит? Брать ваш скетч и компилировать? А вот с ошибкой - уже можно предположить "откуда ветер дует".
Компялятор, кстати, вам намекает что ему не нравится - типы параметров. И даже подсказывает какие типы были бы более правильными.
Пробовали перевести текст это ошибки?
Там сказанно что вторым параметром вы передали переменную типа byte [4], а он ожидает IPAddress
Объявите как он просит
Не знаю как работать, а компилироватся - начнет.
Ну а с вачдогом - значит повезло вам. Я просто указал на него как источник возможных проблем.
Спасибо чуть подправил, работает. Оставлю это здесь:
DNS lookup:
А от ENC28J60 мне пришлось отказаться - не нашел библиотеки, подеерживающей отправки udp пакета в определенный адрес. И еще - по поводу ватчдога - где можно почитать? Всегда покупал оригинальные ардуины - проблем нет, но не факт что буду покупать их и впредь, может проблема в том, что неоригинал?