Я использую следующий код в течение нескольких месяцев (без проблем) в среде .NET 2.0 / 3.5:
string server="192.168.1.3";
IPHostEntry ipe = System.Net.Dns.GetHostEntry(server);
IPAddress ipa = ipe.AddressList[0];
IPEndPoint ipep = new IPEndPoint(ipa, (int)UdpServices.Domain);
Здесь сервер жестко запрограммирован на IP-адрес, но в моем приложении это может быть что-то вроде «server.test.com».
При преобразовании моего проекта в .NET 4.0 этот код перестал работать при прямой передаче IP-адреса (по-прежнему работает с именем хоста). Вылетает с этим исключением:
System.Net.Sockets.SocketException was unhandled
Message=The requested name is valid, but no data of the requested type was found
Source=System
ErrorCode=11004
NativeErrorCode=11004
StackTrace:
at System.Net.Dns.InternalGetHostByAddress(IPAddress address, Boolean includeIPv6)
at System.Net.Dns.GetHostEntry(String hostNameOrAddress)
Поскольку все, что мне нужно, - это созданный IPEndPoint, я могу обойти эту проблему, используя IPAddress.Parse для создания объекта IPAddress, но я хочу знать, знает ли кто-нибудь из вас, почему это поведение изменилось в .NET 4.0? (Если мы не можем разрешить имя хоста с IP-адреса, теперь генерируется исключение).