时间:2021-05-02
在网络编程中,有时候会需要重新拨号建立网络连接(如Ad点击软件通过重新拨号形成有效点击) ,下面介绍两种程序中拨号的方法.
1、最简单的方法:使用RasDialming令
RasDial是Windows自带的ming令,使用非常简单。实际使用是可将下面代码保存为一个批处理文件,然后直接运行或在程序里进行调用。
rasdial.exe /disconnect '断开连接
del "C:\Documents and Settings\hyuqin\Cookies\*.*" /Q '清除Cookie
rasdial.exe 连接名 连接账户 连接密码 '重新拨号
2、封装为类,灵活调用
上面提到的方法虽然很简单,但并非标准的实现方法,使用时会受到一些限制,此时最好的办法就是将实现代码封装为类库。下面这个类库是网上一位朋友提供的,直接调用就行.
using System;using System.Runtime.InteropServices;
public struct RASCONN{public int dwSize;public IntPtr hrasconn;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)]public string szEntryName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]public string szDeviceType;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]public string szDeviceName;}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct RasStats{public int dwSize;public int dwBytesXmited;public int dwBytesRcved;public int dwFramesXmited;public int dwFramesRcved;public int dwCrcErr;public int dwTimeoutErr;public int dwAlignmentErr;public int dwHardwareOverrunErr;public int dwFramingErr;public int dwBufferOverrunErr;public int dwCompressionRatioIn;public int dwCompressionRatioOut;public int dwBps;public int dwConnectionDuration;}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct RasEntryName{public int dwSize;//[MarshalAs(UnmanagedType.ByValTStr,SizeConst=(int)RasFieldSizeConstants.RAS_MaxEntryName + 1)]public string szEntryName;//#if WINVER5// public int dwFlags;// [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]// public string szPhonebookPath;//#endif}public class RAS{[DllImport("Rasapi32.dll", EntryPoint = "RasEnumConnectionsA",SetLastError = true)]
internal static extern int RasEnumConnections(ref RASCONN lprasconn, // buffer to receive connections dataref int lpcb, // size in bytes of bufferref int lpcConnections // number of connections written to buffer );
[DllImport("rasapi32.dll" , CharSet = CharSet.Auto)]internal static extern uint RasGetConnectionStatistics(IntPtr hRasConn, // handle to the connection[In, Out]RasStats lpStatistics // buffer to receive statistics);[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]public extern static uint RasHangUp(IntPtr hrasconn // handle to the RAS connection to hang up );
[DllImport("rasapi32.dll", CharSet = CharSet.Auto)]public extern static uint RasEnumEntries(string reserved, // reserved, must be NULLstring lpszPhonebook, // pointer to full path and// file name of phone-book file [In, Out]RasEntryName[] lprasentryname, // buffer to receive// phone-book entriesref int lpcb, // size in bytes of bufferout int lpcEntries // number of entries written// to buffer);
[DllImport("wininet.dll", CharSet = CharSet.Auto)]public extern static int InternetDial(IntPtr hwnd,[In]string lpszConnectoid,uint dwFlags,ref int lpdwConnection,uint dwReserved);
public RAS(){}}public enum DEL_CACHE_TYPE //要删除的类型。{File,//表示internet临时文件Cookie //表示Cookie}
public class RASDisplay{[DllImport("wininet.dll", CharSet = CharSet.Auto)]public static extern bool DeleteUrlCacheEntry(DEL_CACHE_TYPE type);private string m_duration;private string m_ConnectionName;private string[] m_ConnectionNames;private double m_TX;private double m_RX;private bool m_connected;private IntPtr m_ConnectedRasHandle;
RasStats status = new RasStats();public RASDisplay(){m_connected = true;RAS lpras = new RAS();RASCONN lprasConn = new RASCONN();
lprasConn.dwSize = Marshal.SizeOf(typeof(RASCONN));lprasConn.hrasconn = IntPtr.Zero;
int lpcb = 0;int lpcConnections = 0;int nRet = 0;lpcb = Marshal.SizeOf(typeof(RASCONN));
nRet = RAS.RasEnumConnections(ref lprasConn, ref lpcb, reflpcConnections);
if (nRet != 0){m_connected = false;return;}
if (lpcConnections > 0){//for (int i = 0; i < lpcConnections; i++)//{
names.dwSize = entryNameSize;m_ConnectedRasHandle = lprasConn.hrasconn;RAS.RasGetConnectionStatistics(lprasConn.hrasconn, stats);
m_ConnectionName = lprasConn.szEntryName;
int Hours = 0;int Minutes = 0;int Seconds = 0;
Hours = ((stats.dwConnectionDuration / 1000) / 3600);Minutes = ((stats.dwConnectionDuration / 1000) / 60) - (Hours * 60);Seconds = ((stats.dwConnectionDuration / 1000)) - (Minutes * 60) - (Hours * 3600);
m_duration = Hours + " hours " + Minutes + " minutes " + Seconds + " secs";m_TX = stats.dwBytesXmited;m_RX = stats.dwBytesRcved;//}}else {m_connected = false;}
int lpNames = 1;int entryNameSize = 0;int lpSize = 0;RasEntryName[] names = null;
entryNameSize = Marshal.SizeOf(typeof(RasEntryName));lpSize = lpNames * entryNameSize;
names = new RasEntryName[lpNames];names[0].dwSize = entryNameSize;
uint retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);
//if we have more than one connection, we need to do it againif (lpNames > 1){names = new RasEntryName[lpNames];for (int i = 0; i < names.Length; i++){names.dwSize = entryNameSize;}
retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);
}m_ConnectionNames = new string[names.Length];
if (lpNames > 0){for (int i = 0; i < names.Length; i++){m_ConnectionNames = names.szEntryName;}}}
public string Duration{get{return m_connected ? m_duration : "";}}
public string[] Connections{get{return m_ConnectionNames;}}
public double BytesTransmitted{get{return m_connected ? m_TX : 0;}}public double BytesReceived{get{return m_connected ? m_RX : 0;}}public string ConnectionName{get{return m_connected ? m_ConnectionName : "";}}public bool IsConnected{get{return m_connected;}}
public int Connect(string Connection){int temp = 0;uint INTERNET_AUTO_DIAL_UNATTENDED = 2;int retVal = RAS.InternetDial(IntPtr.Zero, Connection, INTERNET_AUTO_DIAL_UNATTENDED, ref temp, 0);return retVal;}public void Disconnect(){RAS.RasHangUp(m_ConnectedRasHandle);}}
调用方法:
RASDisplay ras = new RASDisplay();ras.Disconnect(); //断开连接ras.Connect("ADSL"); //重新拨号
本文源自:翔宇亭——IT乐园(http://),转载请保留此信息!声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
错误691是宽带ADSL拨号上网用户常常遇到的故障提示。宽带ADSL拨号上网使用PPPOE协议连接,通过电话线传输数据,使用adsl专用modem实现数据的调制
adsl拨号上网用户常常遇到的故障提示。宽带adsl拨号上网使用pppoe协议连接,通过电话线传输数据,使用adsl专用modem实现数据的调制解调,提示错误6
adsl拨号上网用户常常遇到的故障提示,简单地说就是网络不通了。宽带adsl拨号上网使用pppoe协议连接,通过电话线传输数据,使用adsl专用modem实现数
本文介绍了腾达(Tenda)W908R无线路由器,通过ADSL拨号上网的设置方法;ADSL拨号上网,又叫做PPPoE拨号上网、宽带连接拨号上网。使用ADSL拨号
无线路由器怎么设置?无线路由器内置有简单的虚拟拨号软件,可以存储用户名和密码拨号上网,可以实现为拨号接入Internet的ADSL、CM等提供自动拨号功能,而无