HJWalter's response was also the clue that I needed to use UDP with a Static IP address. Thank You.
But how to get the local DNS and what if it changes? In my case, ipconfig listed 2 DNS Servers.
My solution is to connect to the local network with a dynamic IP address, gather the needed information, then set the WiFi.config() with the desired Fixed IP Address and the 'learned' Local DNS, Subnet, and Gateway.
// Connect to Local Network with credentials
WiFi.begin( NVM_Data.Network, NVM_Data.Password );
// Wait for WiFi connection, or TimeOut
while( WiFi.status() != WL_CONNECTED )
{
Serial.print( "." );
delay( 500 );
if( Init )
{
if( ++Trys >= WIFI_STA_TRYS )
{
/* Unable to connect to Local Network at Initialization.
Assume bad credentials. Exit loop so changes can be made via
Access Point;
*/
WiFiMode = WIFI_AP;
WiFi.mode( WiFiMode );
break;
}
}
}
if( WiFi.status() == WL_CONNECTED )
{
// Connection made to Local Network
Serial.printf( "\r\nConnected to " );
Serial.println( WiFi.SSID() );
Serial.println( " IP Address: " + WiFi.localIP().toString() );
Serial.println( " Local DNS: " + WiFi.dnsIP().toString() );
Serial.println( " Subnet Mask: " + WiFi.subnetMask().toString() );
Serial.println( " Gateway: " + WiFi.gatewayIP().toString() );
if( DeviceIP.fromString( NVM_Data.DeviceIP ) )
{
// DeviceIP is valid, now set Fixed device IP Address with Network info learned at connection
Serial.printf( "\r\nSetting Fixed IP Address %s\r\n", NVM_Data.DeviceIP );
WiFi.config( DeviceIP, WiFi.dnsIP(), WiFi.gatewayIP(), WiFi.subnetMask() );
// Local Network Info
Serial.println( " IP Address: " + WiFi.localIP().toString() );
Serial.println( " Local DNS: " + WiFi.dnsIP().toString() );
Serial.println( " Subnet Mask: " + WiFi.subnetMask().toString() );
Serial.println( " Gateway: " + WiFi.gatewayIP().toString() );
}
else
{
Serial.println( "Invalid Fixed Device IP Address" );
}
EventLogAdd( EVENT_WIFI_STA_CONNECT_OK );
}
else
{
// Connection to Local Network Failed
Serial.printf( "\r\nConnection to %s Failed\r\n", NVM_Data.Network );
EventLogAdd( EVENT_WIFI_STA_CONNECT_FAIL );
}
}
else
{
// Local Network Credentials are invalid, just start Access Point
WiFiMode = WIFI_AP;
WiFi.persistent(false); // Do not write new connections to FLASH
}
GregryCM