private void buttonConnect_Click(object sender, EventArgs e)
        {
            try
            {
                // Read the IP address
                IPAddress serverIPAddress;
                if (!IPAddress.TryParse(textBoxIPAddress.Text, out serverIPAddress))
                {
                    MessageBox.Show("Invalid IP address: " + textBoxIPAddress.Text);
                    textBoxIPAddress.Focus();
                    return;
                }

                // Read the port number
                int port;
                if (!int.TryParse(textBoxPort.Text, out port))
                {
                    MessageBox.Show("Invalid port number: " + textBoxPort.Text);
                    textBoxPort.Focus();
                    return;
                }

                // Begin connecting to the remote IP
                ClientSocket                      = new ClientTcpSocket();
                ClientSocketReader                = new SocketPacketProtocol(ClientSocket);
                ClientSocket.ConnectCompleted    += ClientSocket_ConnectCompleted;
                ClientSocket.WriteCompleted      += ClientSocket_WriteCompleted;
                ClientSocket.ShutdownCompleted   += ClientSocket_ShutdownCompleted;
                ClientSocketReader.PacketArrived += ClientSocket_PacketArrived;
                ClientSocket.ConnectAsync(serverIPAddress, port);
                ClientSocketState = SocketState.Connecting;
                textBoxLog.AppendText("Connecting socket to " + (new IPEndPoint(serverIPAddress, port)).ToString() + Environment.NewLine);
            }
            catch (Exception ex)
            {
                ResetSocket();
                textBoxLog.AppendText("Error creating connecting socket: [" + ex.GetType().Name + "] " + ex.Message + Environment.NewLine);
            }
            finally
            {
                RefreshDisplay();
            }
        }