C# 网络连接判断
要实现的是:程序运行首先检测网络连接上外网没有,如果连接上执行下面的任务。没有连接上那么每隔10分钟检测一次网络是否连外网,如果连接上,执行下面的任务。如果连续测试12次...
要实现的是:
程序运行首先检测网络连接上外网没有, 如果连接上 执行下面的任务。 没有连接上 那么每隔10分钟检测一次 网络是否连外网, 如果连接上 ,执行下面的任务。如果连续测试12次则程序自动退出。
请说详细一点 谢谢
感谢thinkluoqi提供解决思路,但是问题是如果目标机器拒绝PING 或本机防火墙设置不能ping出,问题还是没有解决.
感谢笨瓜007,提供的方案不能判断是否连接外网,如果局域网连接上,提示的还是连接
liujw1220 提供的方案和感谢笨瓜007的方案一样都不能解决问题。 展开
程序运行首先检测网络连接上外网没有, 如果连接上 执行下面的任务。 没有连接上 那么每隔10分钟检测一次 网络是否连外网, 如果连接上 ,执行下面的任务。如果连续测试12次则程序自动退出。
请说详细一点 谢谢
感谢thinkluoqi提供解决思路,但是问题是如果目标机器拒绝PING 或本机防火墙设置不能ping出,问题还是没有解决.
感谢笨瓜007,提供的方案不能判断是否连接外网,如果局域网连接上,提示的还是连接
liujw1220 提供的方案和感谢笨瓜007的方案一样都不能解决问题。 展开
7个回答
展开全部
下面这个程序就是, 你可以直接去建立一个控制台应用程序去调试一下
不过需要说明一下,程序的思路就是,通过PING的方式 去ping internet上计算机的IP地址(这里是随便用的一个网通服务器IP123.145.68.1),如果能ping成功代表,本地电脑连接上外网。。
123.145.68.1这个IP地址可以随意换 只要是在internet上的计算机的IP都可以,不过如果你程序的这个IP不是通过配置,而是写死在程序中的情况,推荐你使用一个一直都在线的计算机IP ,比如QQ,163等服务器IP(你应该明白吧)
那个IP 也可以换成 如http://www.163.com的 字符串,不过这时候 需要对
PingReply pr = p.Send("http://www.163.com");这句代码 进行try catch一下(因为,断开网络的时候会抛出异常);
暂停10分钟的那段代码要写在catch里,这里就不详细列出了。 你肯定知道的。
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.NetworkInformation;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Ping p = new Ping();//创建Ping对象p
PingReply pr = p.Send("123.145.68.1");//向指定IP或者主机名的计算机发送ICMP协议的ping数据包
if (pr.Status == IPStatus.Success)//如果ping成功
{
Console.WriteLine("网络连接成功, 执行下面任务...");
}
else
{
int times = 0;//重新连接次数;
do
{
if (times >= 12)
{
Console.WriteLine("重新尝试连接超过12次,连接失败程序结束");
return;
}
Thread.Sleep(600000);//等待十分钟(方便测试的话,你可以改为1000)
pr = p.Send("123.145.68.1");
Console.WriteLine(pr.Status);
times++;
}
while (pr.Status != IPStatus.Success);
Console.WriteLine("连接成功");
times = 0;//连接成功,重新连接次数清为0;
}
}
}
}
不知道符合你要求不, 希望对你有帮助 ,,睡了 累死了,,语文差死了 所以组织了很久的语言,哈哈,
不过需要说明一下,程序的思路就是,通过PING的方式 去ping internet上计算机的IP地址(这里是随便用的一个网通服务器IP123.145.68.1),如果能ping成功代表,本地电脑连接上外网。。
123.145.68.1这个IP地址可以随意换 只要是在internet上的计算机的IP都可以,不过如果你程序的这个IP不是通过配置,而是写死在程序中的情况,推荐你使用一个一直都在线的计算机IP ,比如QQ,163等服务器IP(你应该明白吧)
那个IP 也可以换成 如http://www.163.com的 字符串,不过这时候 需要对
PingReply pr = p.Send("http://www.163.com");这句代码 进行try catch一下(因为,断开网络的时候会抛出异常);
暂停10分钟的那段代码要写在catch里,这里就不详细列出了。 你肯定知道的。
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.NetworkInformation;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Ping p = new Ping();//创建Ping对象p
PingReply pr = p.Send("123.145.68.1");//向指定IP或者主机名的计算机发送ICMP协议的ping数据包
if (pr.Status == IPStatus.Success)//如果ping成功
{
Console.WriteLine("网络连接成功, 执行下面任务...");
}
else
{
int times = 0;//重新连接次数;
do
{
if (times >= 12)
{
Console.WriteLine("重新尝试连接超过12次,连接失败程序结束");
return;
}
Thread.Sleep(600000);//等待十分钟(方便测试的话,你可以改为1000)
pr = p.Send("123.145.68.1");
Console.WriteLine(pr.Status);
times++;
}
while (pr.Status != IPStatus.Success);
Console.WriteLine("连接成功");
times = 0;//连接成功,重新连接次数清为0;
}
}
}
}
不知道符合你要求不, 希望对你有帮助 ,,睡了 累死了,,语文差死了 所以组织了很久的语言,哈哈,
展开全部
要用的函数:InternetGetConnectedState
函数原形:BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved);
参数lpdwFlags返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。
INTERNET_CONNECTION_MODEM 通过调治解调器连接网络
INTERNET_CONNECTION_LAN 通过局域网连接网络
这个函数的功能是很强的。它可以:
1. 判断网络连接是通过网卡还是通过调治解调器
2. 是否通过代理上网
3. 判断连接是On Line还是Off Line
4. 判断是否安装“拨号网络服务”
5. 判断调治解调器是否正在使用
这个win32 API在系统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.EventArgs e){
System.Int32 dwFlag = new int();
if(!InternetGetConnectedState(ref dwFlag, 0))
MessageBox.Show(未连网!);else
if((dwFlag & INTERNET_CONNECTION_MODEM)!=0)
MessageBox.Show(采用调治解调器上网。);else
);
}
函数原形:BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved);
参数lpdwFlags返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。
INTERNET_CONNECTION_MODEM 通过调治解调器连接网络
INTERNET_CONNECTION_LAN 通过局域网连接网络
这个函数的功能是很强的。它可以:
1. 判断网络连接是通过网卡还是通过调治解调器
2. 是否通过代理上网
3. 判断连接是On Line还是Off Line
4. 判断是否安装“拨号网络服务”
5. 判断调治解调器是否正在使用
这个win32 API在系统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.EventArgs e){
System.Int32 dwFlag = new int();
if(!InternetGetConnectedState(ref dwFlag, 0))
MessageBox.Show(未连网!);else
if((dwFlag & INTERNET_CONNECTION_MODEM)!=0)
MessageBox.Show(采用调治解调器上网。);else
);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以下是一个判断网络是否连接的类,通过ping某一个网络地址,如某台设备的iP、网关或者是网站地址,从而判断网络是否连接、判断和某台设备是否连接、判断某个网站是否还可以访问等。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.NetworkInformation;
using System.Net;
namespace Test
{
class Networkstate
{
/// <summary>
/// 测试与某个网络地址是否连通
/// </summary>
/// <param name="ipAddress">iP地址如:192.168.1.1,或者是网站地址如:www.url.com</param>
/// <returns>true为连通,false为不连通</returns>
public bool NetworkC(string ipAddress)
{
bool isConnet = false;
System.Net.NetworkInformation.Ping pingSender = new System.Net.NetworkInformation.Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = ""; //ping内容
byte[] buffer = Encoding.UTF8.GetBytes(data);
int timeout = 120; //响应时间,毫秒
try
{
PingReply reply = pingSender.Send(ipAddress, timeout, buffer, options);
string info = "";
info = reply.Status.ToString();
if (info.Equals("Success"))
{
isConnet = true;
}
else
{
isConnet = false;
}
}
catch(Exception ex){
isConnet = false;
throw ex;
}
return isConnet;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.NetworkInformation;
using System.Net;
namespace Test
{
class Networkstate
{
/// <summary>
/// 测试与某个网络地址是否连通
/// </summary>
/// <param name="ipAddress">iP地址如:192.168.1.1,或者是网站地址如:www.url.com</param>
/// <returns>true为连通,false为不连通</returns>
public bool NetworkC(string ipAddress)
{
bool isConnet = false;
System.Net.NetworkInformation.Ping pingSender = new System.Net.NetworkInformation.Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = ""; //ping内容
byte[] buffer = Encoding.UTF8.GetBytes(data);
int timeout = 120; //响应时间,毫秒
try
{
PingReply reply = pingSender.Send(ipAddress, timeout, buffer, options);
string info = "";
info = reply.Status.ToString();
if (info.Equals("Success"))
{
isConnet = true;
}
else
{
isConnet = false;
}
}
catch(Exception ex){
isConnet = false;
throw ex;
}
return isConnet;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
试试这个看:
using System.Runtime.InteropServices;
private const long INTERNET_CONNECTION_MODEM = 1;//Local system uses a modem to connect to the Internet.
private const long INTERNET_CONNECTION_LAN = 2; //Local system uses a local area network to connect to the Internet.
private const long INTERNET_CONNECTION_PROXY = 4;//Local system uses a proxy server to connect to the Internet.
private const long INTERNET_CONNECTION_MODEM_BUSY = 8; //No longer used.
private const long INTERNET_CONNECTION_CONFIGURED = 64; //Local system has a valid connection to the Internet, but it might or might not be currently connected.
private const long INTERNET_CONNECTION_OFFLINE = 32; // Local system is in offline mode.
private const long INTERNET_RAS_INSTALLED = 16; //Local system has RAS installed.
[DllImport("wininet.dll")]
public static extern bool InternetGetConnectedState(out long lpdwFlags, long dwReserved);
protected void Page_Load(object sender, EventArgs e)
{
long lfag;
string strConnectionDev = "";
if (InternetGetConnectedState(out lfag, 0))
strConnectionDev = "网络连接正常!";
else
strConnectionDev = "网络连接不可用!";
if ((lfag & INTERNET_CONNECTION_OFFLINE) > 0)
strConnectionDev += "OFFLINE 本地系统处于离线模式。";
if ((lfag & INTERNET_CONNECTION_MODEM) > 0)
strConnectionDev += "Modem 本地系统使用调制解调器连接到互联网。";
if ((lfag & INTERNET_CONNECTION_LAN) > 0)
strConnectionDev += "LAN 本地系统使用的局域网连接到互联网。";
if ((lfag & INTERNET_CONNECTION_PROXY) > 0)
strConnectionDev += "a Proxy";
if ((lfag & INTERNET_CONNECTION_MODEM_BUSY) > 0)
strConnectionDev += "Modem but modem is busy";
this.Response.Write("<script>alert('" + strConnectionDev + "');</script>");
}
我试过了,测试网络连接可以的
using System.Runtime.InteropServices;
private const long INTERNET_CONNECTION_MODEM = 1;//Local system uses a modem to connect to the Internet.
private const long INTERNET_CONNECTION_LAN = 2; //Local system uses a local area network to connect to the Internet.
private const long INTERNET_CONNECTION_PROXY = 4;//Local system uses a proxy server to connect to the Internet.
private const long INTERNET_CONNECTION_MODEM_BUSY = 8; //No longer used.
private const long INTERNET_CONNECTION_CONFIGURED = 64; //Local system has a valid connection to the Internet, but it might or might not be currently connected.
private const long INTERNET_CONNECTION_OFFLINE = 32; // Local system is in offline mode.
private const long INTERNET_RAS_INSTALLED = 16; //Local system has RAS installed.
[DllImport("wininet.dll")]
public static extern bool InternetGetConnectedState(out long lpdwFlags, long dwReserved);
protected void Page_Load(object sender, EventArgs e)
{
long lfag;
string strConnectionDev = "";
if (InternetGetConnectedState(out lfag, 0))
strConnectionDev = "网络连接正常!";
else
strConnectionDev = "网络连接不可用!";
if ((lfag & INTERNET_CONNECTION_OFFLINE) > 0)
strConnectionDev += "OFFLINE 本地系统处于离线模式。";
if ((lfag & INTERNET_CONNECTION_MODEM) > 0)
strConnectionDev += "Modem 本地系统使用调制解调器连接到互联网。";
if ((lfag & INTERNET_CONNECTION_LAN) > 0)
strConnectionDev += "LAN 本地系统使用的局域网连接到互联网。";
if ((lfag & INTERNET_CONNECTION_PROXY) > 0)
strConnectionDev += "a Proxy";
if ((lfag & INTERNET_CONNECTION_MODEM_BUSY) > 0)
strConnectionDev += "Modem but modem is busy";
this.Response.Write("<script>alert('" + strConnectionDev + "');</script>");
}
我试过了,测试网络连接可以的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
判断网络是否连接要使用Windows API
发个例子给你.
这个是DotNet平台的P/Invoke调用.
仿造这个,在你程序里弄个新线程,10分钟执行一次,12次退出,很容易的.
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.EventArgs e){
System.Int32 dwFlag = 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("采用网卡上网。");
}
楼上的方案属于非完全性方案,判断发包是否成功.这样永远都会有Bug的.
发个例子给你.
这个是DotNet平台的P/Invoke调用.
仿造这个,在你程序里弄个新线程,10分钟执行一次,12次退出,很容易的.
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.EventArgs e){
System.Int32 dwFlag = 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("采用网卡上网。");
}
楼上的方案属于非完全性方案,判断发包是否成功.这样永远都会有Bug的.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询