C# 网络连接判断

要实现的是:程序运行首先检测网络连接上外网没有,如果连接上执行下面的任务。没有连接上那么每隔10分钟检测一次网络是否连外网,如果连接上,执行下面的任务。如果连续测试12次... 要实现的是:
程序运行首先检测网络连接上外网没有, 如果连接上 执行下面的任务。 没有连接上 那么每隔10分钟检测一次 网络是否连外网, 如果连接上 ,执行下面的任务。如果连续测试12次则程序自动退出。

请说详细一点 谢谢
感谢thinkluoqi提供解决思路,但是问题是如果目标机器拒绝PING 或本机防火墙设置不能ping出,问题还是没有解决.

感谢笨瓜007,提供的方案不能判断是否连接外网,如果局域网连接上,提示的还是连接

liujw1220 提供的方案和感谢笨瓜007的方案一样都不能解决问题。
展开
 我来答
thinkluoqi
2009-10-18 · TA获得超过113个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:192万
展开全部
下面这个程序就是, 你可以直接去建立一个控制台应用程序去调试一下

不过需要说明一下,程序的思路就是,通过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;
}
}
}
}

不知道符合你要求不, 希望对你有帮助 ,,睡了 累死了,,语文差死了 所以组织了很久的语言,哈哈,
神速小羊
2016-01-16 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:2%
帮助的人:4516万
展开全部
要用的函数: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
);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谛道文化
2015-12-30 · TA获得超过2442个赞
知道小有建树答主
回答量:923
采纳率:76%
帮助的人:365万
展开全部
以下是一个判断网络是否连接的类,通过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;
}

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liujw1220
2009-10-19 · TA获得超过282个赞
知道小有建树答主
回答量:299
采纳率:0%
帮助的人:103万
展开全部
试试这个看:
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>");

}

我试过了,测试网络连接可以的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笨瓜007
2009-10-18 · TA获得超过426个赞
知道小有建树答主
回答量:610
采纳率:0%
帮助的人:474万
展开全部
判断网络是否连接要使用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的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式