【发布时间】:2010-10-25 00:50:39
【问题描述】:
C# 2008 SP1
我正在使用此代码连接到我们的客户网站。这是针对软件电话应用程序的。在用户拨打电话之前,软件电话必须测试是否有活动的 Internet 连接。
所以,我想做的是使用 httpWebRequest 类连接到我们的客户网站。如果响应正常,则可以继续进行 Internet 连接。
但是,我注意到响应时间过长。我不确定这是否不是一种非常有效的测试方法。
但是,当我浏览他们的网站时,加载页面只需不到一秒钟的时间。但是当我使用 HttpWebRequest 类时需要太长时间
所以对此的要求是:
有时会在客户办公室使用代理。我不能使用 TCPClient 类(没有代理属性)。
代理不支持 SOCKS,因此无法使用 Sockets 类。
我需要使用超时属性。所以不能使用 WebClient 类。这是因为软件电话会冻结,直到返回响应。所以几秒钟后超时。
所以我唯一能想到的就是 HttpWebRequest 类。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.xxxxxxxxx.com");
request.Timeout = 5000;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Console.WriteLine("IsSIPServerAvailable: " + response.StatusCode);
isAvailable = true;
}
======== 使用 p\Invoke 编辑 ====
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);
[Flags]
enum InternetConnectionState_e : int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
// In function for checking internet
InternetConnectionState_e flags = 0;
bool isConnected = InternetGetConnectedState(ref flags, 0);
【问题讨论】:
标签: c# networking