登陸器源碼C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;
using System.Net.Sockets;
using System.Net;

namespace Legend_of_mir2
{
    public partial class Main : Form
    {
        //服務器名稱數組
        string[] ServerName = new string[25];
        //服務器IP地址數組
        string[] ServerIP = new string[25];
        //服務器端口數組
        string[] ServerPort = new string[25];
        //服務器名稱用於寫入配置文件
        string StartGameName = null;
        //服務器IP地址用於寫入配置文件
        string StartGameNameIP = null;
        //服務器端口用於寫入配置文件
        int StartGameNamePort = 7000;
        public Main()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 程序加載
         /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Main_Load(object sender, EventArgs e)
        {
            //判斷是否在傳奇目錄
            if (File.Exists(Environment.CurrentDirectory + "//map//0.map"))
            {

            }
            else
            {
                MessageBox.Show("請在傳奇目錄運行!","提示");
                //關閉程序
                Application.Exit();
            }
        }

        /// <summary>
        /// 點擊進入遊戲按鈕觸發事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            //獲取應用程序路徑
            string path = Environment.CurrentDirectory;
            //檢測並創建配置文件
            FileStream FsFtp = new FileStream(path + "//ftp.ini", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            FileStream FsMir = new FileStream(path + "//mir.ini", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            FileStream FsMst = new FileStream(path + "//mirsetup.ini", FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
            //關閉流
            FsFtp.Close();
            FsMir.Close();
            FsMst.Close();
            //寫入配置文件
            //配置文件ftp.ini
            StreamWriter SwFtp = new StreamWriter(path + "//ftp.ini");
            SwFtp.WriteLine("[Server]");
            SwFtp.WriteLine("ServerCount=1");
            SwFtp.WriteLine("Server1caption=" + StartGameName);
            SwFtp.WriteLine("Server1name=" + StartGameName.ToString().Trim());
            //配置文件mir.ini
            StreamWriter MrFtp = new StreamWriter(path + "//mir.ini");
            MrFtp.WriteLine("[setup]");
            MrFtp.WriteLine("ServerAddr=" + StartGameNameIP);
            MrFtp.WriteLine("FontName=Fixedsys");
            //配置文件mirsetup.ini
            StreamWriter MsFtp = new StreamWriter(path + "//mirsetup.ini");
            MsFtp.WriteLine("[setup]");
            MsFtp.WriteLine("ServerAddr=" + StartGameNameIP);
            MsFtp.WriteLine("FontName=Fixedsys");
            //關閉流
            MsFtp.Close();
            MrFtp.Close();
            SwFtp.Close();
            try
            {
                //設置啓動進程信息
                ProcessStartInfo info = new ProcessStartInfo();
                //啓動文件
                info.FileName = path + "//Mir.Client.dat";
                //禁止使用系統程序外殼程序啓動進程
                info.UseShellExecute = false;
                //啓動進程
                Process.Start(info);
            }
            catch (Exception ex)
            {
                //異常
                MessageBox.Show("意外錯誤!!!"+ex.Message); ;
            }
          

        }
        /// <summary>
        /// 添加新服務器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AddGames_Click(object sender, EventArgs e)
        {
            //統計服務器數量
            int Num = ListBox.Items.Count;

            #region 服務器名稱
            if (tbName.Text != "" || tbName.Text != null)
            {
                //添加服務器名稱進列表
                ListBox.Items.Add(tbName.Text.Trim());
                //添加服務器名稱進入數組
                ServerName[Num] = this.tbName.Text.Trim();
            }
            else
            {
                //服務器名稱爲填寫
                MessageBox.Show("請填寫服務器名稱!");
            }
            #endregion

            #region IP地址判斷
            //獲取用戶輸入IP地址
            string ip = this.tbIP.Text.Trim();
            //正則表達式判斷IP地址合法性
            if (System.Text.RegularExpressions.Regex.IsMatch(ip, "[0-9]{1,3}//.[0-9]{1,3}//.[0-9]{1,3}//.[0-9]{1,3}"))
            {
                string[] ips = ip.Split('.');
                if(ips.Length == 4 || ips.Length == 6)
                {

                    if (System.Int32.Parse(ips[0]) < 256 && System.Int32.Parse(ips[1]) < 256 & System.Int32.Parse(ips[2]) < 256 & System.Int32.Parse(ips[3]) < 256)
                    {
                        //添加IP地址進入數組
                        ServerIP[Num] = ip;
                    }
                    else
                    {
                        //清除列表中 當前用戶輸入的錯誤信息
                        ListBox.Items.Remove(tbName.Text.Trim());
                        MessageBox.Show("IP地址錯誤!請從新輸入!");
                       
                    }

                }
                else
                {
                    //清除列表中 當前用戶輸入的錯誤信息
                    ListBox.Items.Remove(tbName.Text.Trim());
                    MessageBox.Show("IP地址錯誤!請從新輸入!");
                   
                }

            }

            else
            {
                //清除列表中 當前用戶輸入的錯誤信息
                ListBox.Items.Remove(tbName.Text.Trim());
                MessageBox.Show("IP地址錯誤!請從新輸入!");
               
            }
            #endregion

            #region 端口號判斷
            try
            {
                //獲取用戶輸入端口號
                int Port = int.Parse(this.textBox2.Text.Trim());
                //判斷端口號是否爲整數
                int TextNum = Convert.ToInt32(Port);
                //添加端口號進入數組
                ServerPort[Num] = Port.ToString();
            }
            catch
            {
                //清除列表中 當前用戶輸入的錯誤信息
                ListBox.Items.Remove(tbName.Text.Trim());
                MessageBox.Show("對不起,端口號不正確!請重新輸入");
               
            }
            #endregion


        }
        /// <summary>
        /// 選擇服務器時觸發事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ListBox_MouseDown(object sender, MouseEventArgs e)
        {
          //獲取用戶在列表中 選擇的項
          int Num =   ListBox.SelectedIndex;
          //如果列表爲空
          if (Num == -1)
          {
              MessageBox.Show("還未添加服務器,/r/r/n請添加服務器!","友情提示");
              return;
          }
          //獲得用戶選擇的服務器IP地址
          string Serverip = ServerIP[Num];
          //獲得用戶現在的服務器端口
          string Serverport = ServerPort[Num];
          //狀態顯示
          State.Text = "正在測試.....";
          try
          {
              //測試服務器端口是否開放
              TcpClient tp = new TcpClient(Serverip, int.Parse(Serverport));
              //結束連接
              tp.Close();
              //狀態顯示
              State.Text = "該服務器正常運行!";
              //設置進程啓動參數----IP name port
              StartGameName = ServerName[Num].ToString();
              StartGameNameIP = ServerIP[Num].Trim();
              StartGameNamePort = int.Parse(ServerPort[Num]);
          }
          catch (Exception)
          {
              State.Text = "該服務器維護中!";
          }
         

        }
        /// <summary>
        /// 鼠標移動到listBox觸發事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ListBox_MouseEnter(object sender, EventArgs e)
        {
            //如果listbox還沒選擇項
            if (ListBox.SelectedIndex == -1)
            {
                //如果列表框項數量>0
                if (ListBox.Items.Count > 0)
                {
                    //默認選擇第一項
                    ListBox.SelectedIndex = 0;
                }
                else
                {
                    //設置爲未選擇狀態
                    ListBox.SelectedIndex = -1;
                }
            }
        }
    }
}

 

 

//解決部分的代碼
/// <summary>
        /// 點擊進入遊戲按鈕觸發事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
            //獲取應用程序路徑
            string path = Environment.CurrentDirectory;
            //檢測並創建配置文件
            FileStream FsFtp = new FileStream(path + "//ftp.ini", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            FileStream FsMir = new FileStream(path + "//mir.ini", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            FileStream FsMst = new FileStream(path + "//mirsetup.ini", FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);

            //寫入配置文件
            //配置文件ftp.ini
            StreamWriter SwFtp = new StreamWriter(FsFtp, Encoding.Unicode);
            SwFtp.WriteLine("[Server]");
            SwFtp.WriteLine("ServerCount=1");
            SwFtp.WriteLine("Server1caption=" + StartGameName);
            SwFtp.WriteLine("Server1name=" + StartGameName.ToString().Trim());
            //配置文件mir.ini
            StreamWriter MrFtp = new StreamWriter(FsMir, Encoding.Unicode);
            MrFtp.WriteLine("[setup]");
            MrFtp.WriteLine("ServerAddr=" + StartGameNameIP);
            MrFtp.WriteLine("FontName=宋體");

            //配置文件mirsetup.ini
            StreamWriter MsFtp = new StreamWriter(FsMst, Encoding.Unicode);
            MsFtp.WriteLine("[setup]");
            MsFtp.WriteLine("ServerAddr=" + StartGameNameIP);
            MsFtp.WriteLine("FontName=宋體");
           
            //關閉流
            MsFtp.Close();
            MrFtp.Close();
            SwFtp.Close();
            //關閉流
            FsFtp.Close();
            FsMir.Close();
            FsMst.Close();
            //設置啓動進程信息
            ProcessStartInfo info = new ProcessStartInfo();
            //啓動文件
            info.FileName = path + "//Mir.Client.dat";
            //禁止使用系統程序外殼程序啓動進程
            info.UseShellExecute = false;
            //啓動進程
            Process.Start(info);

            }
            catch (Exception ex)
            {
                //異常
                MessageBox.Show("意外錯誤!!!"+ex.Message); ;
            }
        }


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章