Асинхронный клиент-сервер - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Вот уже 3 дня бьюсь над проблемой, решение которой не могу найти. Вообщем, коротко говоря, имеется серверное приложение, которое асинхронно принимает клиентов. Первое, второе подключения проходят нормально, а потом вновь подключенный клиент просто перестает запускаться. Путем точек останова, я вроде как понял что сервер в какой то момент перестает принимать клиентов. Вот вырезки с кода, очень жду помощи, т.к. на этом работа остановилась .
        // Каждую секунду проверяем подключенных клиентов                        
        private static void TimerConnectClient_Tick(object sender)
        {
            if (listener.Pending())
            {           
                listener.BeginAcceptSocket(new AsyncCallback(OnAccept), listener);              
            }
        }
        // подключился клиент            
        private static void OnAccept(IAsyncResult ar)
        {            
            Socket client = ((TcpListener)ar.AsyncState).EndAcceptSocket(ar);
            var EventArgRecive = new SocketAsyncEventArgs();
            EventArgRecive.SetBuffer(new byte[SizeBufReciveClient], 0, SizeBufReciveClient);
            EventArgRecive.AcceptSocket = client;
            EventArgRecive.Completed += ReciveAsync;
            if (!client.ReceiveAsync(EventArgRecive))
            {
                ReciveAsync(null, EventArgRecive);
            }
        }
       // пришло сообщение от клиента
        private static void ReciveAsync(object sender, SocketAsyncEventArgs e)
        {
            string result = System.Text.Encoding.Default.GetString(e.Buffer.Where(x => x != 0).ToArray());
 
            if (result.Trim().Length > 1)
            {
                e.SetBuffer(new byte[SizeBufReciveClient], 0, SizeBufReciveClient);
                    case "#1":
                        List<string> listTurbines = new List<string>(turbines.Count);
                        foreach (Turbine t in turbines)
                            if (t.Group.Trim() == Params1)
                                listTurbines.Add(t.GetNameTurbine);
                        SendClient(e.AcceptSocket, listTurbines);
                        break;
                    case "#2":
.............................................
            }
            else
            {
                SendClient(e.AcceptSocket, "0");
            }
         
            try
            {
                if (!e.AcceptSocket.ReceiveAsync(e))
                    ReciveAsync(null, e);
            }
            catch { }
        }
А вот соединение на клиентской части
        /// <summary>
        /// Проверка соединения с сервером
        /// </summary>
        public static System.Net.Sockets.Socket Connect(System.Net.IPAddress ipClient, System.Net.IPAddress ipServer, int port)
        {
            var EndPointClient = new System.Net.IPEndPoint(ipClient, port);
            var EndPointServer = new System.Net.IPEndPoint(ipServer, port);
            var client = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
            client.Bind(EndPointClient);
            client.Connect(EndPointServer);
            return client;
        }
После этого, запускается метод, который отправляет запрос, и ждет ответа от сервера. Ответ не приходит. Подскажите, в чем ошибка

Решение задачи: «Асинхронный клиент-сервер»

textual
Листинг программы
                while (true)
                {
                    AllDone.Reset();
                    Logger.Act("Ожидается соединение");
                    listener.BeginAccept(new AsyncCallback(AcceptCallBack), listener);
                    AllDone.WaitOne();
                }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы