/// <summary>
/// 初始化VPN連接
///
/// </summary>
private void InitVpnEntry(){
try
{
this.AllUsersPhoneBook.Open();
entry = RasEntry.CreateVpnEntry(EntryName, "61.155.18.16", RasVpnStrategy.Default,
RasDevice.GetDeviceByName("(PPTP)", RasDeviceType.Vpn));
entry.Options.RemoteDefaultGateway = bDefaultGw;
entry.Options.NetworkLogOn = false;
entry.Options.PreviewDomain = false;
this.AllUsersPhoneBook.Entries.Remove(entry.Name);
this.AllUsersPhoneBook.Entries.Add(entry);
this.statusbar.Text = "VPN连接创建成功,程序初始化完成!";
this.DisconnectButton.Enabled = false;
}catch(Exception ex){
//MessageBox.Show(ex.GetType()+":打开或创建电话簿时发生错误。请检查VPN连接是否已经存在!");
}
}
/// <summary>
/// 建立VPN連接
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
InitVpnEntry();
this.Dialer.EntryName = EntryName;
this.Dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.AllUsers);
this.username = txtUsername.Text.Trim();
this.password = txtPassword.Text.Trim();
if (this.username.Length == 0 || this.password.Length == 0)
{
MessageBox.Show("请填写用户名和密码!");
return;
}
try
{
this.Dialer.Credentials = new NetworkCredential(username,password);
this.handle = this.Dialer.DialAsync();
this.DisconnectButton.Enabled = true;
this.BtnExit.Enabled = false;
this.btnConnect.Enabled = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
/// <summary>
/// 斷開VPN連接
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DisconnectButton_Click(object sender, EventArgs e)
{
if (entry == null)
return;
if (this.Dialer.IsBusy)
{
this.Dialer.DialAsyncCancel();
}
else
{
RasConnection connection = RasConnection.GetActiveConnectionByHandle(this.handle);
if (connection != null)
{
connection.HangUp();
}
}
this.BtnExit.Enabled = true;
this.btnConnect.Enabled = true;
this.DisconnectButton.Enabled = false;
this.statusbar.Text = "VPN连接已断开!";
}
/// <summary>
/// 異步VPN連接過程回調函數
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Dialer_StateChanged(object sender, StateChangedEventArgs e)
{
this.statusbar.Text = e.State.ToString();
}
/// <summary>
/// 異步VPN連接過程回調函數
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Dialer_DialCompleted(object sender, DialCompletedEventArgs e)
{
if (e.Cancelled)
{
this.DisconnectButton.Enabled = false;
this.BtnExit.Enabled = true;
this.btnConnect.Enabled = true;
this.statusbar.Text = "拨号已被取消!";
}
else if (e.TimedOut)
{
this.DisconnectButton.Enabled = false;
this.BtnExit.Enabled = true;
this.btnConnect.Enabled = true;
this.statusbar.Text = "连接超时!";
}
else if (e.Error != null)
{
this.DisconnectButton.Enabled = false;
this.BtnExit.Enabled = true;
this.btnConnect.Enabled = true;
this.statusbar.Text = e.Error.ToString();
}
else if (e.Connected)
{
this.DisconnectButton.Enabled = true;
this.BtnExit.Enabled = false;
this.btnConnect.Enabled = false;
this.statusbar.Text = "VPN拨号成功!";
WriteSettings();
GetVpnClientIp();
}
if (!e.Connected)
{
this.DisconnectButton.Enabled = false;
this.BtnExit.Enabled = true;
this.btnConnect.Enabled = true;
this.statusbar.Text = "未能成功连接VPN服务器!";
MessageBox.Show("VPN拨号失败!请检查服务器是否正常,用户名和密码是否正确。");
}
}
没有评论:
发表评论