예제 #1
0
        /// <summary>
        /// Метод вызываемый при завершении попытки поключения клиента
        /// </summary>
        public void ConnectCallback(IAsyncResult ar)
        {
            var result = "Подключение успешно!";

            try
            {
                // Получаем подключенного клиента
                TcpClientData myTcpClient = (TcpClientData)ar.AsyncState;
                NetworkStream ns          = myTcpClient.TcpClient.GetStream();
                myTcpClient.TcpClient.EndConnect(ar);

                // Запускаем асинхронный метод чтения сетевых данных для подключенного TCP клиента
                myTcpClient.Buffer = new byte[Global.Lengthheader];
                ns.BeginRead(myTcpClient.Buffer, 0, myTcpClient.Buffer.Length, ReadCallback, myTcpClient);
                //Parent.ChangeBackColor(Color.Goldenrod);
            }
            catch (Exception)
            {
                //MessageBox.Show(e.Message);
                // Обработка ошибок подключения
                DisconnectClient();
                result = "Подключение провалено!";
                SoundError();
            }

            // Активация события успешного или неуспешного подключения к серверу,
            // здесь серверу можно отослать ознакомительные данные о себе (например, имя клиента)
            if (Connected != null)
            {
                Connected.BeginInvoke(this, result, null, null);
            }
        }
예제 #2
0
 /// <summary>
 /// Завершение работы подключенного клиента
 /// </summary>
 private static void DeleteClient(TcpClientData mtc)
 {
     if (mtc == null || mtc.TcpClient.Connected != true)
     {
         return;
     }
     mtc.TcpClient.GetStream().Close(); // по настоянию MSDN закрываем поток отдельно у клиента
     mtc.TcpClient.Close();             // затем закрываем самого клиента
 }
예제 #3
0
        /// <summary>
        /// Обратный метод завершения принятия клиентов
        /// </summary>
        public void AcceptCallback(IAsyncResult ar)
        {
            if (ModeNetwork == Mode.Indeterminately)
            {
                return;
            }

            var listener = (TcpListener)ar.AsyncState;

            try
            {
                _tcpClient = new TcpClientData {
                    TcpClient = listener.EndAcceptTcpClient(ar)
                };


                // Немедленно запускаем асинхронный метод извлечения сетевых данных
                // для акцептированного TCP клиента
                var ns = _tcpClient.TcpClient.GetStream();
                _tcpClient.Buffer = new byte[Global.Lengthheader];
                ns.BeginRead(_tcpClient.Buffer, 0, _tcpClient.Buffer.Length, ReadCallback, _tcpClient);


                // Продолжаем ждать запросы на подключение
                listener.BeginAcceptTcpClient(AcceptCallback, listener);

                // Активация события успешного подключения клиента
                if (Accept != null)
                {
                    Accept.BeginInvoke(this, null, null);
                }
            }
            catch
            {
                // Обработка исключительных ошибок возникших при акцептирования клиента.
                SoundError();
            }
        }
예제 #4
0
        /// <summary>
        /// Попытка асинхронного подключения клиента к серверу
        /// </summary>
        /// <param name="ipserver">IP адрес сервера</param>
        /// <param name="port">Порт сервера</param>
        public void ConnectClient(string ipserver, int port)
        {
            try
            {
                if (ModeNetwork == Mode.Indeterminately)
                {
                    _tcpClient = new TcpClientData();
                    _tcpClient.TcpClient.BeginConnect(IPAddress.Parse(ipserver), port, ConnectCallback, _tcpClient);

                    ModeNetwork = Mode.Client;
                }
                else
                {
                    SoundError();
                }
            }
            catch (Exception e)
            {
                if (ShowStatusMessage != null)
                {
                    ShowStatusMessage(e.Message);
                }
            }
        }