I've been developing a small game with a friend just for fun and as a learning project. I've tried a bunch of different ways, but the same problem still remains. The first client to connect can connect perfectly fine, but then when another person tries to connect, the first client loses connection.

Here is my code:

Server Class
Code:
        private static TcpListener m_Listener;
        private static MySqlConnection m_SQL;
        private static ManualResetEvent m_ClientConnected = new ManualResetEvent(false);
        private List<Player> m_Players = new List<Player>();
        private void StartAddingPlayer(TcpListener listener)
        {
            m_ClientConnected.Reset();
            Console.WriteLine("Waiting for a connection...");
            listener.BeginAcceptTcpClient(new AsyncCallback(AddPlayer), listener);
            m_ClientConnected.WaitOne();
        }
        private void AddPlayer(IAsyncResult ar)
        {
            TcpListener listener = (TcpListener)ar.AsyncState;
            TcpClient client = listener.EndAcceptTcpClient(ar);
            m_Players.Add(new Player(client, this, m_SQL));
            Console.WriteLine("Connection completed!");
            m_ClientConnected.Set();
        }
        private void ListenForClients()
        {
            m_Listener.Start();
            while (true)
            {
                StartAddingPlayer(m_Listener);
            }
        }
        public Server()
        {
            m_Listener = new TcpListener(new IPEndPoint(IPAddress.Any, 9999));
            Console.WriteLine("Server started on 127.0.0.1 using port 9999.");
            try
            {
                m_SQL = new MySqlConnection("loltryingtogetmysqlinfo");

                m_SQL.Open();
                Console.WriteLine("Successfully connected to MySQL server.");
            }
            catch
            {
                Console.WriteLine("Failure to connect to MySQL server!");
                return;
            }
            Thread t = new Thread(new ThreadStart(ListenForClients));
            t.Start();
        }
    }
Player Class
Code:
    class Player
    {
        private static TcpClient m_Client;
        private static Server m_Server;
        private static MySqlConnection m_SQL;
        private static ASCIIEncoding m_Encoder;
        private string m_Name;
        private string m_Email;
        private string m_Step;
        private DataTable SQLQuery(string query)
        {
            MySqlDataAdapter adapter = new MySqlDataAdapter(query, m_SQL);
            DataSet data = new DataSet();
            adapter.Fill(data);
            return data.Tables[0];
        }
        private void SendMessage(string msg)
        {
            try
            {
                StreamWriter m_Writer = new StreamWriter(m_Client.GetStream());
                m_Writer.WriteLine(msg);
                m_Writer.Flush();
            }
            catch { }
        }
        private void UpdateChat()
        {
            while (true)
            {
                try
                {
                    StreamReader m_Reader = new StreamReader(m_Client.GetStream());
                    string text = m_Reader.ReadLine();
                    if (m_Step == "login/register")
                    {
                        if (text == "1")
                        {
                            m_Step = "login/email";
                            SendMessage("Please enter your email address.");
                        }
                        else if (text == "2")
                        {
                            m_Step = "register/email";
                            SendMessage("Please enter your email address.");
                        }
                    }
                    else if (m_Step == "login/email")
                    {
                        m_Email = text;
                        SendMessage("Please enter your password.");
                        m_Step = "login/password";
                    }
                    else if (m_Step == "login/password")
                    {
                        SHA1 hash = SHA1.Create();
                        hash.ComputeHash(m_Encoder.GetBytes(text));
                        string pass = Convert.ToBase64String(hash.Hash);
                        DataTable data = SQLQuery("SELECT * FROM players WHERE email=\'" + m_Email + "\'");
                        if (data.Rows[0] != null && data.Rows[0].Field<string>("email") == m_Email && data.Rows[0].Field<string>("password") == pass)
                        {
                            m_Name = data.Rows[0].Field<string>("name");
                            SendMessage("Successfully logged in, welcome back " + m_Name + "!");
                        }
                        else
                        {
                            SendMessage("Error logging in, make sure your username and password are correct.");
                            Login();
                        }
                    }
                }
                catch { }
            }
        }
        private void Login()
        {
            m_Step = "login/register";
            SendMessage("Do you have an account or would you like to register?");
            SendMessage("1. Login");
            SendMessage("2. Register");
        }
        public Player(TcpClient client, Server server, MySqlConnection conn)
        {
            m_Client = client;
            m_Server = server;
            m_SQL = conn;
            m_Encoder = new ASCIIEncoding();
            Login();
            Thread t = new Thread(new ThreadStart(UpdateChat));
            t.Start();
        }
    }