Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Index was out of range. Index was out of range.  
:(
    Опции темы
DEADLY
Дата 18.11.2010, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 23.8.2007

Репутация: 1
Всего: 1



Есть листэнер который слушает 5000 порт , иногда при конекте возникает ошибка 
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
вот здесь 
Код

int ind = socketsList.IndexOf(acceptedList[i]);
                            Socket client = (Socket)socketsList[ind];
                            StateObject slave = new StateObject();

вот код ф-ии
Код

public static void StartListening()
        {
            IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            IPAddress ipAddress = IPAddress.Parse("172.27.2.6");
            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 5000);
            Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            reset = false;
            data = null;
            socketsList.Clear();
            acceptedList.Clear();
            socketsList.Add(listener);
            try
            {
                listener.Bind(localEndPoint);
                listener.Listen(1000);
                while (!reset)
                {
                    allDone.Reset();
                    acceptedList.Clear();
                    for (int i = 0; i < socketsList.Count; i++)
                        acceptedList.Add(socketsList[i]);
                    Socket.Select(acceptedList, null, null, 1000);
                    for (int i = 0; i < acceptedList.Count; i++)
                    {
                        if (acceptedList[i] == listener)
                        {
                            listener.BeginAccept(new AsyncCallback(AcceptCallback), listener);
                            allDone.WaitOne();
                        }
                        else
                        {
                            
                            int ind = socketsList.IndexOf(acceptedList[i]);
                            Socket client = (Socket)socketsList[ind];
                            StateObject slave = new StateObject();
                            slave.workSocket = client;
                            try
                            {
                                if (client.Connected)
                                {
                                    client.BeginReceive(slave.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), slave);
                                    allDone.WaitOne();
                                }
                                else if (socketsList.Contains(client))
                                    socketsList.RemoveAt(ind);
                            }
                            
                            catch (Exception e)
                            {
                                Console.WriteLine(e.ToString());
                                if (socketsList.Contains(client))
                                    socketsList.RemoveAt(ind);
                                if (client.Connected)
                                {
                                    client.Shutdown(SocketShutdown.Both);
                                    client.Close();
                                }
                            }
                        }
                    }
                }
                Console.WriteLine("+++++++++++++Reseting listener+++++++++++++");
                for (int i = 0; i < socketsList.Count; i++)
                {
                    Socket sock = (Socket)socketsList[i];
                    sock.Close();
                }
                Console.WriteLine("Clear sockets done. Start new listening");
                StartListening();
            }
            catch (Exception e)
            {                
                for (int i = 0; i < socketsList.Count; i++)
                {
                    Socket sock = (Socket)socketsList[i];
                    sock.Close();
                }
                listener.Close();
                StartListening();
                Thread.Sleep(1000);
            }
        }

PM MAIL   Вверх
Мурлыкатам_
Дата 8.12.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 5.2.2007
Где: город-герой Минск

Репутация: нет
Всего: 2



Код

int ind = socketsList.IndexOf(acceptedList[i]); <---------- результат индекс офф неплохо было бы проверить после отработки.
                            Socket client = (Socket)socketsList[ind];
                            StateObject slave = new StateObject();



--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.