您的位置:首页 > 理论基础 > 计算机网络

c# 判断网络是否连接

2011-10-14 16:17 483 查看
在网上查到有几种方式检查网络是否连接,测试了一下,第一种方式受到ping时延的影响,在某些不支持ping的地址或者网段甚至不可用,因此建议采用方法2
1.调用cmd中的ping命令,分析输出信息来确定网络是否连接
//使用ping命令来判断,txtIP文本框输入一个有效的远程主机ip
System.Diagnostics.ProcessproIP=
new
System.Diagnostics.Process();
proIP.StartInfo.FileName=
"cmd.exe"
;
proIP.StartInfo.UseShellExecute=
false
;
proIP.StartInfo.RedirectStandardInput=
true
;
proIP.StartInfo.RedirectStandardOutput=
true
;
proIP.StartInfo.RedirectStandardError=
true
;
proIP.StartInfo.CreateNoWindow=
true
;
//不显示cmd窗口
proIP.Start();
proIP.StandardInput.WriteLine(
"ping"
+
this
.txtIP.Text.Trim());
proIP.StandardInput.WriteLine(
"exit"
);
string
strResult=proIP.StandardOutput.ReadToEnd();
if
(strResult.IndexOf(
"(0%loss)"
)!=-1)
this
.txtShow.Text=
"Ping通了!"
;
else
if
(strResult.IndexOf(
"(100%loss)"
)!=-1)
this
.txtShow.Text=
"无法Ping通!"
;
else
this
.txtShow.Text=
"数据有丢失!"
proIP.Close();
2.使用InternetGetConnectedState()函数
这个win32API在系统system32文件夹中winInet.dll中,可以用来判断是否联网和上网的方式是Modem还是LAN等
//使用DllImport需导入命名空间
using
System.Runtime.InteropServices;
//InternetGetConnectedState返回的状态标识位的含义:
private
const
int
INTERNET_CONNECTION_MODEM=1;
private
const
int
INTERNET_CONNECTION_LAN=2;
private
const
int
INTERNET_CONNECTION_PROXY=4;
private
const
int
INTERNET_CONNECTION_MODEM_BUSY=8;
[DllImport(
"winInet.dll"
)]
//声明外部的函数:
private
static
extern
bool
InternetGetConnectedState(
ref
int
dwFlag,
int
dwReserved
);
static
void
Main(
string
[]args)
{
int
dwFlag=0;
string
netstatus=
""
;
if
(!InternetGetConnectedState(
ref
dwFlag,0))
Console.WriteLine(
"未联网!"
);
else
{
if
((dwFlag&INTERNET_CONNECTION_MODEM)!=0)
netstatus+=
"采用调治解调器上网\n"
;
if
((dwFlag&INTERNET_CONNECTION_LAN)!=0)
netstatus+=
"采用网卡上网\n"
;
if
((dwFlag&INTERNET_CONNECTION_PROXY)!=0)
netstatus+=
"采用代理上网\n"
;
if
((dwFlag&INTERNET_CONNECTION_MODEM_BUSY)!=0)
netstatus+=
"MODEM被其他非INTERNET连接占用\n"
;
}
Console.WriteLine(netstatus);
Console.ReadLine();
}
win32API函数的做法:
要用的函数:InternetGetConnectedState
函数原形:BOOLInternetGetConnectedState(LPDWORDlpdwFlags,DWORDdwReserved);
参数lpdwFlags返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。
INTERNET_CONNECTION_MODEM通过调治解调器连接网络
INTERNET_CONNECTION_LAN通过局域网连接网络
这个函数的功能是很强的。它可以:
  1.判断网络连接是通过网卡还是通过调治解调器
  2.是否通过代理上网
  3.判断连接是OnLine还是OffLine
  4.判断是否安装“拨号网络服务”
  5.判断调治解调器是否正在使用
这个win32API在系统system32文件夹中winInet.dll中
使用这个判断的话,需要在类中这样写:
private
const
int
INTERNET_CONNECTION_MODEM=1;
private
const
int
INTERNET_CONNECTION_LAN=2;
[DllImport(
"winInet.dll"
)]
private
static
extern
bool
InternetGetConnectedState(
ref
int
dwFlag,
int
dwReserved
);
//调用的方法(Winform为例,放一个按钮,单击即可):
private
void
button1_Click(
object
sender,System.EventArgse){
System.Int32dwFlag=
new
int
();
if
(!InternetGetConnectedState(
ref
dwFlag,0))
MessageBox.Show(
"未连网!"
);
else
if
((dwFlag&INTERNET_CONNECTION_MODEM)!=0)
MessageBox.Show(
"采用调治解调器上网。"
);
else
if
((dwFlag&INTERNET_CONNECTION_LAN)!=0)
MessageBox.Show(
"采用网卡上网。"
);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: