在网络编程中,有时候会需要重新拨号建立网络连接(如Ad点击软件通过重新拨号形成有效点击) ,下面介绍两种程序中拨号的方法.
1、最简单的方法:使用RasDial命令
RasDial是Windows自带的命令,使用非常简单。实际使用是可将下面代码保存为一个批处理文件,然后直接运行或在程序里进行调用。
del "C:\Documents and Settings\hyuqin\Cookies\*.*" /Q '清除Cookie
rasdial.exe 连接名 连接账户 连接密码 '重新拨号
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
namespace LvChaNetwork
{
public class ChangIp
{
/// <summary>
/// 执行doc命令类
/// </summary>
/// <summary>
/// 执行doc命令
/// </summary>
/// <param name="strOutput">要执行的doc命令</param>
/// <param name="b">是否显示窗口</param>
/// <returns>此返回值只表示doc命令是否执行(与执行成功与否无关)</returns>
public static bool JS_cmd(string strOutput, bool b)
{
try
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = b;
p.Start();
p.StandardInput.WriteLine(strOutput);
p.StandardInput.WriteLine("exit");
while (!p.StandardOutput.EndOfStream)
{
strOutput = p.StandardOutput.ReadLine();
Console.WriteLine(strOutput);
}
p.WaitForExit();
p.Close();
return true;
}
catch (Exception)
{
return false;
}
}
/// <summary>
/// 执行doc命令(默认不显示窗口)
/// </summary>
/// <param name="strOutput">要执行的doc命令</param>
/// <returns>此返回值只表示doc命令是否执行(与执行成功与否无关)</returns>\
public static bool JS_cmd(string strOutput)
{
return JS_cmd(strOutput, true);
}
}
}
用这个类调用上面的命令,就可以了
2、封装为类,灵活调用
上面提到的方法虽然很简单,但并非标准的实现方法,使用时会受到一些限制,此时最好的办法就是将实现代码封装为类库。下面这个类库是网上一位朋友提供的,直接调用就行.
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
internal static extern int RasEnumConnections
[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
public RAS()
public class RASDisplay
RasStats status = new RasStats();
RAS lpras = new RAS();
lprasConn.dwSize = Marshal.SizeOf(typeof(RASCONN));
int lpcb = 0;
nRet = RAS.RasEnumConnections(ref lprasConn, ref lpcb, ref
if (nRet != 0)
}
if (lpcConnections > 0)
//{
m_ConnectedRasHandle = lprasConn.hrasconn;
int Hours = 0;
Hours = ((stats.dwConnectionDuration / 1000) / 3600);
entryNameSize = Marshal.SizeOf(typeof(RasEntryName));
names = new RasEntryName[lpNames];
uint retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);
//if we have more than one connection, we need to do it again
retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);
}
public string Duration
public string[] Connections
public double BytesTransmitted
}
public int Connect(string Connection)
调用方法: