如题

解决方案 »

  1.   

    转载://使用ping命令来判断,txtIP文本框输入一个有效的远程主机ip
    System.Diagnostics.Process proIP=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();再来看看用win32 API函数的做法:
    要用的函数: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
    if((dwFlag & INTERNET_CONNECTION_LAN)!=0)
    MessageBox.Show("采用网卡上网。");
    }
      

  2.   

    另一个例子:我写过拨号程序,给你例子里看看。
    [StructLayout(LayoutKind.Sequential,Pack=4,CharSet=CharSet.Auto)]
    public struct RASDIALPARAMS
    {
    public int dwSize;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=RAS_MaxEntryName + 1)]
    public string szEntryName;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=RAS_MaxPhoneNumber + 1)]
    public string szPhoneNumber;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=RAS_MaxCallbackNumber+ 1)]
    public string szCallbackNumber;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=UNLEN + 1)]
    public string szUserName;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=PWLEN + 1)]
    public string szPassword;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=DNLEN + 1)]
    public string szDomain;
    public int dwSubEntry;
    public int dwCallbackId;
    }[DllImport("Rasapi32.dll", CharSet=CharSet.Auto)]
    public static extern int RasDial(int lpRasDialExtensions, string lpszPhonebook,ref RASDIALPARAMS lprasdialparams, int dwNotifierType,Callback lpvNotifier, ref int lphRasConn);
    private RASDIALPARAMS RasDialParams;
    private int Connection;
    [DllImport("Rasapi32.dll", CharSet=CharSet.Auto)]
    public static extern int RasHangUp(long lphRasConn);
    [StructLayout(LayoutKind.Sequential,Pack=4,CharSet=CharSet.Auto)]
    public struct RASCONN
    {
    public int dwSize;
    public int hrasconn;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=RAS_MaxEntryName + 1)]
    public string szEntryName;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=RAS_MaxDeviceType + 1)]
    public string szDeviceType;
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst=RAS_MaxDeviceName + 1)]
    public string szDeviceName;
    }[DllImport("Rasapi32.dll", CharSet=CharSet.Auto)]
    public static extern int RasEnumConnections(ref RASCONN lprasconn,ref int lpcb,ref int lpcConnections);public RasManager()
    {
    Connection = 0;
    RasDialParams = new RASDIALPARAMS();
    RasDialParams.dwSize = Marshal.SizeOf(RasDialParams);
    }下面是调用方法
    Connection = 0;
    RasDialParams.szEntryName += "\0";
    RasDialParams.szUserName += "\0";
    RasDialParams.szPassword += "\0";
    int result = RasDial(0,null,ref RasDialParams,0,null,ref Connection);
      

  3.   

    binbare的方法只能拨一个已有的连接吧