日期:2014-05-20  浏览次数:21097 次

如何判断网络连接状态和获取网络IP地址
问题1:如何判断网络已经连接(50)
问题2:获取网络IP地址(50)
要求能适应拨号上网和通过局域网上网。两种上网方式

------解决方案--------------------
IPHostEntry获取IP
你尝试连一个公共的网站,连通就可以说明网络是已经连接的了。
------解决方案--------------------
//获取IP地址
public string GetIPAddress()
{
IPAddress ip = new IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);
return ip.ToString();
}
------解决方案--------------------
判断网络已经连接
C# code

[DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue);

        public bool IsInternetConnected()
        {
            int i = 0;

            return InternetGetConnectedState(out i, 0);
        }

------解决方案--------------------
AutoResetEvent waiter = new AutoResetEvent(false);
Ping myPing = new Ping();
myPing.PingCompleted += new PingCompletedEventHandler(myPing_PingCompleted);
string data = "OK"; 
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 10000;
PingOptions options = new PingOptions(64, true);
myPing.SendAsync(_AppState.ServerName, timeout, buffer, options, waiter); 

IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] connections = properties.GetActiveTcpConnections();
foreach (TcpConnectionInformation info in connections) {
if (info.RemoteEndPoint.Equals(targetEndPoint)) {
_AppState.OnlineStatus = Constant.ONLINE_STATUS_ONLINE;
isOnline = true;
break;
}
}

[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue);


 System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
for (int i = 0; i < addressList.Length; i ++) 

s += addressList[i].ToString(); 


------解决方案--------------------
string st = "";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"] == true)
{
System.Array ar;
ar = (System.Array)(mo.Properties["IpAddress"].Value);
st = ar.GetValue(0).ToString();
break;
}
}
moc = null;
mc = null;

------解决方案--------------------
照顾楼主不认识VB.NET的语法,转换为C# 
C# code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Net;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            WebClient wb = new WebClient();
            String strIP = "";
            String strContent = "";
            Regex regIP = new Regex("\\d{1,3}.\\d{1,3}.\\d{1,3}.\\d{1,3}");
            try
            {
                strContent = wb.DownloadString("http://www.ip138.com/ips8.asp");
                if (strContent.IndexOf("IP地址查询") >= 1)
                {
                    textBox1.Text = "爽,可以上网!";
                    strIP = regIP.Match(strContent).ToString();
                    if (strIP.Trim() != "")
                    {
                        textBox2.Text = "俺的IP是:" + strIP;
                    }
                    else
                    {
                        textBox2.Text = "虽然俺上网了,但是俺是黑户,没IP!";
                    }
                }
            }
            catch
            {
                textBox1.Text = "真不爽,不能上网,我去炸了电信!";
                textBox2.Text = "不能上网,没IP!";
            }
        }
    }
}