사용할 수있는 네트워크 연결이 있는지 확인하는 가장 좋은 방법은 무엇입니까?네트워크 연결을 어떻게 확인합니까?
답변
System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()
가 NetworkChange 클래스에서 이벤트를 사용하여 네트워크 가용성의 IP 주소를 변경하거나 변경 사항을 모니터링하려면
표시된 답변은 100 % 괜찮지 만, 표준 방법이 가상 카드 (가상 박스, ...)에 속는 경우가 있습니다. 또한 속도 (직렬 포트, 모뎀 등)에 따라 일부 네트워크 인터페이스를 삭제하는 것이 좋습니다. 여기
이러한 경우 확인하는 코드의 일부입니다 :/// <summary>
/// Indicates whether any network connection is available
/// Filter connections below a specified speed, as well as virtual network cards.
/// </summary>
/// <returns>
/// <c>true</c> if a network connection is available; otherwise, <c>false</c>.
/// </returns>
public static bool IsNetworkAvailable()
{
return IsNetworkAvailable(0);
}
/// <summary>
/// Indicates whether any network connection is available.
/// Filter connections below a specified speed, as well as virtual network cards.
/// </summary>
/// <param name="minimumSpeed">The minimum speed required. Passing 0 will not filter connection using speed.</param>
/// <returns>
/// <c>true</c> if a network connection is available; otherwise, <c>false</c>.
/// </returns>
public static bool IsNetworkAvailable(long minimumSpeed)
{
if (!NetworkInterface.GetIsNetworkAvailable())
return false;
foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces())
{
// discard because of standard reasons
if ((ni.OperationalStatus != OperationalStatus.Up) ||
(ni.NetworkInterfaceType == NetworkInterfaceType.Loopback) ||
(ni.NetworkInterfaceType == NetworkInterfaceType.Tunnel))
continue;
// this allow to filter modems, serial, etc.
// I use 10000000 as a minimum speed for most cases
if (ni.Speed < minimumSpeed)
continue;
// discard virtual cards (virtual box, virtual pc, etc.)
if ((ni.Description.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0) ||
(ni.Name.IndexOf("virtual", StringComparison.OrdinalIgnoreCase) >= 0))
continue;
// discard "Microsoft Loopback Adapter", it will not show as NetworkInterfaceType.Loopback but as Ethernet Card.
if (ni.Description.Equals("Microsoft Loopback Adapter", StringComparison.OrdinalIgnoreCase))
continue;
return true;
}
return false;
}
이 올바른지 많은 upvotes받을 자격이 있습니다 - 나는이 응답에서 언급 한 가상 어댑터 아마도 가상 컴퓨터에 대한 추가 확인에 대한 – Marek
+1로 인해 발생합니다 수락 된 대답을 언급 한 NetworkAvailabilityChanged 이벤트가 안정적으로 발생하지 것을 발견했습니다. 어제이 사건에 빠지게. 그러나 나는 여전히 그들의 이름에 '가상'이 없기 때문에 이것이 'Hype-V'를 다루지 않는다고 생각한다. – Herdo
@Herdo - 예, 코드가 완벽하지 않으며 가상 세계에서 완벽한 코드가 될 수 있다고 생각하지 않습니다. 그러나 당신은 그것을 향상시킬 수 있습니다. –
마이크로 소프트 윈도우 비스타와 7을 사용하여 NCSI (네트워크 연결 상태 표시기) 기술 :
- NCSI는 DNS 조회에 수행 www.msftncsi.com을 입력 한 다음 http://www.msftncsi.com/ncsi.txt을 요청하십시오. 이 파일은 일반 텍스트 파일이며 'Microsoft NCSI'텍스트 만 포함합니다.
- NCSI가 dns.msftncsi.com에 대한 DNS 조회 요청을 보냅니다. 이 DNS 주소는 131.107.255.255로 확인되어야합니다. 주소가 일치하지 않으면 인터넷 연결이 제대로 작동하지 않는다고 가정합니다.
이것은 훌륭하지만 기술적으로 '네트워크'의 가용성에 관한 것은 아니지만 'http를 통해 인터넷에 연결되어 있습니까?' 완벽한 네트워크 연결은 가능하지만 인터넷에 연결할 수는 없습니다 (예 : 독립 실행 형 LAN). NCSI에 대한 자세한 정보 참조 : http://technet.microsoft.com/en-us/library/cc766017.aspx – MichielB
이 메서드를 호출하면 네트워크 연결을 확인할 수 있습니다.
public static bool IsConnectedToInternet()
{
bool returnValue = false;
try
{
int Desc;
returnValue = Utility.InternetGetConnectedState(out Desc, 0);
}
catch
{
returnValue = false;
}
return returnValue;
}
아래 코드를 넣으십시오.
[DllImport("wininet.dll")]
public extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
- 1. 내가 느린 네트워크 연결을
- 2. 관리자 권한없이 .NET에서 네트워크 연결을 어떻게 비활성화합니까?
- 3. 네트워크 연결을 관리하는 소프트웨어
- 4. 네트워크 연결을 시각화하는 도구
- 5. 사용자가 Android에서 네트워크 시간을 사용하고 있는지 어떻게 확인합니까?
- 6. Windows에서 네트워크 연결을 모니터링하는 도구
- 7. Finder가 네트워크 연결을 숨 깁니다.
- 8. MKMapView 네트워크 연결을 추적 하시겠습니까?
- 9. OAuth 요청을 어떻게 확인합니까?
- 10. PHP에서 호스트를 어떻게 확인합니까?
- 11. SQLite3 구문을 어떻게 확인합니까?
- 12. 파일 형식을 어떻게 확인합니까?
- 13. 는 어떻게 확인합니까 1
- 14. 병합이 필요한지 어떻게 확인합니까?
- 15. IsolatedStorageFile이 있는지 어떻게 확인합니까?
- 16. PrintDialog.AllowCurrentPage의 값을 어떻게 확인합니까?
- 17. 302 응답을 어떻게 확인합니까?
- 18. AJAX는 어떻게 사용자를 확인합니까?
- 19. 파일이 업로드되었는지 어떻게 확인합니까?
- 20. 어떻게 기본값을 확인합니까?
- 21. 링크가 방문했는지 어떻게 확인합니까?
- 22. Windows 응용 프로그램에서 비활성화 된 네트워크 인터페이스 연결을 어떻게 검색합니까?
- 23. 어떻게 Perl 스크립트에서 네트워크 연결을 재설정 할 수 있습니까?
- 24. WPF/XBAP 응용 프로그램에서 네트워크 연결을 감지합니까?
- 25. 자바 스크립트가있는 원격 URL의 유효성을 어떻게 확인합니까?
- 26. (ASP.NET에서) 연결이 원격 연결인지 어떻게 확인합니까?
- 27. 매킨토시의 Java App에서 매번 네트워크 연결을 요청합니다.
- 28. 활동을 사용하여 안드로이드의 네트워크 연결을 확인하는 방법
- 29. objective-c의 네트워크 연결을 확인하는 방법
- 30. Java로 네트워크 연결을 모니터하는 방법은 무엇입니까?
"제한적으로 사용 가능합니까?" – tofutim
이것은 WPF에서 항상 작동하지 않습니다. 일부 랩톱은 false를 반환하고 일부는 true를 반환합니다. – krilovich
이것이 실제로 작동합니까? 방금이 라인을 작성하고 라우터를 끄고 여전히 true를 반환합니다! – Mushfiq