2
A
回答
5
就是这样。实质上,这是来自2005年1月12日的MSDN提示和技巧网络广播。它被稍微改写以符合我自己的标准,并且完全未经测试,但您明白了。随你便便使用。
enum ConnectionStatus
{
Offline,
OnlineTargetNotFound,
OnlineTargetFound,
}
ConnectionStatus GetConnectionStatus(String url)
{
try
{
//
// If the device is set to loopback, then no connection exists.
//
String hostName = System.Net.Dns.GetHostName();
System.Net.IPHostEntry host = System.Net.Dns.GetHostByName(hostName);
String ipAddress = host.AddressList.ToString();
if(ipAddress == System.Net.IPAddress.Parse("127.0.0.1").ToString())
{
return ConnectionStatus.Offline;
}
//
// Now we know we're online. Use a web request and check
// for a response to see if the target can be found or not.
// N.B. There are blocking calls here.
//
System.Net.WebResponse webResponse = null;
try
{
System.Net.WebRequest webRequest = System.Net.WebRequest.Create(url);
webRequest.Timeout = 10000;
webResponse = webRequest.GetResponse();
return ConnectionStatus.OnlineTargetFound;
}
catch(Exception)
{
return ConnectionStatus.OnlineTargetNotFound;
}
}
catch(Exception)
{
return ConnectionStatus.Offline;
}
}
+0
感谢您的示例。它工作正常,除了我得到一个非常奇怪的间歇性问题。最后通过在“finally”块中敲击来修复它:webRequest = null; webResponse.Close(); webResponse = null; – 2011-05-31 03:10:18
1
这是一段源自同一网络广播的代码。用法应该非常简单。尽管它可以作为网络监视器,在检测到连接可用性时通知您,但您可以选择仅提取IsUrlAvailable函数。
using System; using Microsoft.WindowsMobile.Status; using System.IO; using System.Net; using System.Windows.Forms; using System.Threading; namespace RAMIS2.Classes { class NetworkWatcher : IDisposable { public delegate void NetworkStatusDeterminedDelegate(bool remoteServerReachable, bool internetReachable); public event NetworkStatusDeterminedDelegate NetworkStatusDetermined; SystemState nw = null; const string _remoteServerExpectedText = @"RAMIS"; Uri InternetUrl = new Uri(@"http://www.google.com"); const string _internetReachableExpectedText = @"Google"; const int sleepTimeBetweenConnectTries = 15000; const int maxConnectTryCount = 2; Uri _remoteServerUrl = new Uri("https://demo.mywebsite.com/test.txt"); bool internetReachable; bool remoteServerReachable; Thread bgw; public void Dispose() { if (bgw != null) { bgw.Abort(); bgw = null; } if (nw != null) { nw.Changed -= NetworkWatcher_Changed; nw.Dispose(); nw = null; } } Control invoke_ctrl; public NetworkWatcher() { invoke_ctrl = new Control(); } public void Start() { // This only works for Windows Mobile 5.0 and higher, not PPC 2003 if (Environment.OSVersion.Version >= new Version(5, 0)) { nw = new SystemState(SystemProperty.ConnectionsCount, false); nw.Changed += new ChangeEventHandler(NetworkWatcher_Changed); } bgw = new Thread(DetermineNetworkState); bgw.Start(); } void NetworkWatcher_Changed(object sender, ChangeEventArgs args) { // instantly test new connection status if (bgw != null) DetermineNetworkState(); } public bool IsUrlReachable(Uri url, string expectedText) { bool isUrlReachable = false; HttpWebRequest httpRequest = null; HttpWebResponse httpResponse = null; Stream responseStream = null; StreamReader responseReader = null; for (int connectTryCount = 0; !isUrlReachable && connectTryCount = 0; } catch (SystemException) { } finally { if (responseReader != null) responseReader.Close(); if (responseStream != null) responseStream.Close(); if (httpResponse != null) httpResponse.Close(); } if (!isUrlReachable) Thread.Sleep(sleepTimeBetweenConnectTries); } return isUrlReachable; } void DetermineNetworkState() { try { while (true) { if (Environment.OSVersion.Version >= ST.WM5.Version) DetermineNetworkStateInternal(SystemState.ConnectionsCount); else DetermineNetworkStateInternal(1); // invoke on GUI thread invoke_ctrl.BeginInvoke(new NetworkStatusDeterminedDelegate(NetworkStatusDetermined), remoteServerReachable, internetReachable); Thread.Sleep(sleepTimeBetweenConnectTries); } } catch (ThreadAbortException) { } } void DetermineNetworkStateInternal(int connectionsCount) { if (connectionsCount > 0) { remoteServerReachable = IsUrlReachable(_remoteServerUrl, _remoteServerExpectedText); internetReachable = remoteServerReachable ? true : IsUrlReachable(InternetUrl, _internetReachableExpectedText); } else remoteServerReachable = internetReachable = false; } } }
相关问题
- 1. 检查网络连接是否可用
- 2. 检查Windows Mobile设备是否空闲
- 3. 是否可以检测蜂窝网络是否可用?
- 4. 检查网络可用性
- 5. 难以使用AFNetworking(AFClient)来检查网络是否可用
- 6. 如何检查WiFi网络是否可用
- 7. 检查SIM卡的网络服务是否可用
- 8. 如何检查ip是否可以在网络中使用?
- 9. 检查是否有特定的网络/ SSID可用
- 10. 如何检查网络连接是否可用在iphone
- 11. 检查网络连接在android中是否可用?
- 12. 检查路径是否在网络上
- 13. Linux:检查是否在同一网络
- 14. 检查网络是否工作在J2ME
- 15. 检查是否连接到网络; jQuery
- 16. c#windows服务 - 检查网络文件夹是否存在
- 17. 如何检查文件是否在Windows网络共享上?
- 18. 检查Windows更新是否可用
- 19. 如何检查设备是否运行Windows CE或Windows Mobile?
- 20. 如何检查互联网是否可用在Windows Phone 7中?
- 21. 检查网站是否可用
- 22. 检查网络可在android
- 23. 使用Python检查网络是否是较大网络的一部分
- 24. 检查网络IF是否可以在C Linux中访问Internet?
- 25. windows phone 8如何检查网络可用性
- 26. 是否有可能检测到蜂窝网络在Android中是否可用?
- 27. 检查网络可用性VB.net
- 28. 如何检查网络可用性?
- 29. Google Analytics for Mobile是否可用于Windows Mobile/Compact Framework
- 30. 检查网站是否可联系
是否有任何特定语言更适合? – 2009-12-26 21:16:53