Open silasalves opened 1 year ago
Latency always that high?
Reply from 192.168.50.43: bytes=32 time=491ms TTL=255 Reply from 192.168.50.43: bytes=32 time=88ms TTL=255 Reply from 192.168.50.43: bytes=32 time=769ms TTL=255 Reply from 192.168.50.43: bytes=32 time=214ms TTL=255
Any difference when dealing with DNS client directly?
> Resolve-DnsName -llmnronly ESP-4A2914.local
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
ESP-4A2914.local A 120 Answer 10.10.10.137
(check out get-help resolve-dnsname
and dnsmodule docs)
afaik we are dealing with multicast replies; looking at ping, there is a single query. PS cmdlet sends out more than one, thus also receiving more than one reply (with consideration that it might miss some requests in the process)
@mcspr Thanks for the response! I think I found a solution, so I am detailing it here.
Latency always that high?
I am afraid so... I placed the device close to the router and ran the ping command again. This is the result:
> ping esp8266.local -n 30
Pinging esp8266.local [192.168.50.43] with 32 bytes of data:
Reply from 192.168.50.43: bytes=32 time=289ms TTL=255
Reply from 192.168.50.43: bytes=32 time=270ms TTL=255
Reply from 192.168.50.43: bytes=32 time=1259ms TTL=255
Reply from 192.168.50.43: bytes=32 time=4ms TTL=255
Reply from 192.168.50.43: bytes=32 time=640ms TTL=255
Reply from 192.168.50.43: bytes=32 time=5ms TTL=255
Reply from 192.168.50.43: bytes=32 time=149ms TTL=255
Reply from 192.168.50.43: bytes=32 time=60ms TTL=255
Reply from 192.168.50.43: bytes=32 time=274ms TTL=255
Reply from 192.168.50.43: bytes=32 time=185ms TTL=255
Reply from 192.168.50.43: bytes=32 time=99ms TTL=255
Reply from 192.168.50.43: bytes=32 time=308ms TTL=255
Reply from 192.168.50.43: bytes=32 time=212ms TTL=255
Reply from 192.168.50.43: bytes=32 time=126ms TTL=255
Reply from 192.168.50.43: bytes=32 time=46ms TTL=255
Reply from 192.168.50.43: bytes=32 time=254ms TTL=255
Reply from 192.168.50.43: bytes=32 time=167ms TTL=255
Reply from 192.168.50.43: bytes=32 time=73ms TTL=255
Reply from 192.168.50.43: bytes=32 time=282ms TTL=255
Reply from 192.168.50.43: bytes=32 time=192ms TTL=255
Reply from 192.168.50.43: bytes=32 time=105ms TTL=255
Reply from 192.168.50.43: bytes=32 time=12ms TTL=255
Reply from 192.168.50.43: bytes=32 time=228ms TTL=255
Reply from 192.168.50.43: bytes=32 time=139ms TTL=255
Reply from 192.168.50.43: bytes=32 time=48ms TTL=255
Reply from 192.168.50.43: bytes=32 time=282ms TTL=255
Reply from 192.168.50.43: bytes=32 time=165ms TTL=255
Reply from 192.168.50.43: bytes=32 time=81ms TTL=255
Reply from 192.168.50.43: bytes=32 time=297ms TTL=255
Reply from 192.168.50.43: bytes=32 time=210ms TTL=255
Ping statistics for 192.168.50.43:
Packets: Sent = 30, Received = 30, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 4ms, Maximum = 1259ms, Average = 215ms
Is there anything that can be done to improve this?
Any difference when dealing with DNS client directly?
Without any changes to the code, not really. It couldn't be found:
> Resolve-DnsName -llmnronly esp8266.local
Resolve-DnsName : esp8266.local : This operation returned because the timeout period expired
At line:1 char:1
+ Resolve-DnsName -llmnronly esp8266.local
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationTimeout: (esp8266.local:String) [Resolve-DnsName], Win32Exception
+ FullyQualifiedErrorId : ERROR_TIMEOUT,Microsoft.DnsClient.Commands.ResolveDnsName
What was bothering me is that the MDNS worked for a short while before stopping completely, so I decided to read the source code and see if there was anything there that could help me. That's how I found the bool MDNSResponder::announce(void) which seemed worth try using -- maybe MDNS was announcing just once and that is why it worked only once as well, who knows? Then I created a quick-and-dirty workaround to test this hypothesis.
First, I added this to the beginning of the file:
// counter used for delaying the call to MDNS.announce()
long int advertiseCounter = 0;
and then I changed the loop()
function to:
void loop(void) {
server.handleClient();
MDNS.update();
// call MDNS.announce() periodically when the counter exceeds the threshold, then resets the counter.
if (advertiseCounter++ > 100000)
{
MDNS.announce();
advertiseCounter = 0;
}
}
And now I can find the device successfully on Windows =)
> Resolve-DnsName -llmnronly esp8266.local
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
esp8266.local A 120 Answer 192.168.50.43
Name : 43.50.168.192.in-addr.arpa
QueryType : PTR
TTL : 120
Section : Answer
NameHost : esp8266.local
The browser can also find it, so I think this issue is at least partially solved... And the reason for the "partial" is that although it works in Windows, it doesn't work at all with Android... On Windows it works whether I use http://esp8266.local
or http://192.168.50.43
; in Android, both fail, no matter the browser I am using (Firefox or Chrome). The phone just returns ERR_ADDRESS_UNREACHABLE
and that's it. Any ideas? I wonder if it's related to the high latency.
https://stackoverflow.com/questions/30449988/how-to-enable-mdns-support-in-android-browser-address-bar Now mdns support avilable in android 12 or higher (I'm not tested)
https://stackoverflow.com/questions/30449988/how-to-enable-mdns-support-in-android-browser-address-bar Now mdns support avilable in android 12 or higher (I'm not tested)
It's not a MDNS error; it fails even when I use the IP itself. I will try with a different phone and see what happens.
Basic Infos
Platform
Settings in IDE
Problem Description
None of the mDNS samples work for me. I can connect through the IP address, but I am not able to find the device using mDNS.
The sample that works the "best" so far is the HelloServer. After it connects and prints
I start pinging esp8266.local and it works once, but then it stops working:
I didn't do any changes to the sample code (other than the network data) and I couldn't find anyone with a solution to this problem either.
Any ideas of what could be preventing MDNS from working after the first time? I am not using OTA and I am erasing all flash contents.
I am pasting the sample code for completion:
MCVE Sketch