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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RemoteEndPoint, RemoteEndPoint 
V
    Опции темы
DEADLY
Дата 5.4.2011, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



есть листенер на 5000 порт например,
Код

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);
            Console.WriteLine("StartListening по 6000 порту");
            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]);                            
                            if (ind < 0)
                            {
                                Console.WriteLine("сбой подключения");
                            }
                            else
                            {
                                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)
            {
                Console.WriteLine("КРИТИЧЕСКАЯ ОШИБКА\n" + e.ToString());
                for (int i = 0; i < socketsList.Count; i++)
                {
                    Socket sock = (Socket)socketsList[i];
                    sock.Close();
                }
                listener.Close();
                StartListening();
            }
        }

 все конекты кладутся в лист
Код

private static void AcceptCallback(IAsyncResult ar)
        {
            try
            {
                allDone.Set();
                Socket listener = (Socket)ar.AsyncState;
                Socket handler = listener.EndAccept(ar);
                socketsList.Add(handler);

                StateObject state = new StateObject();
                state.workSocket = handler;
                //handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }

после мне нада на определеный сокет кинуть команду, но на 
Код

for (int i = 0; i < socketsList.Count; i++)
                {
                    
                        Socket arm = (Socket)socketsList[i];                        
                        armip = ((IPEndPoint)arm.RemoteEndPoint).Address.ToString();
                 }

выдает SocketException <0x80004005>: ... no address was supplied
PM MAIL   Вверх
DEADLY
Дата 5.4.2011, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



проблема решена 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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