读书人

怎么判断网络连接状态和获取网络IP地址

发布时间: 2012-02-02 23:57:14 作者: rapoo

如何判断网络连接状态和获取网络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!";            }        }    }} 


[解决办法]

C# code
private static string getIPAddress ( ) {    System.Net.IPAddress addr;    // 获得本机局域网IP地址    addr = new System.Net.IPAddress ( Dns.GetHostByName ( Dns.GetHostName ( ) ) .AddressList [0].Address ) ;    return addr.ToString ( ) ; } }
[解决办法]
DNS.GetHost("www.sohu.com")可以Get出来就证明上网了

读书人网 >C#

热点推荐