Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация 
:(
    Опции темы
Enelar
Дата 26.1.2009, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вопрос такой. Есть порт например 55555.
Есть миллион клиентов подключенных к этому порту.
На какойто итерации мы вызываем функцию recv().  Получили очередной пакет.
Как нам понять от какого клиента пакет (если никакой информации в пакете о клиенте нет)
PM MAIL   Вверх
Олег2005
Дата 26.1.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

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



Для каждого отдельного подключившегося клиента функция accept() создает присоединенный сокет, и адрес этого сокета (IP и порт)формируются в структуре адреса клиента
int accept(int sd, struct sockaddr *client_addr, int *addrlen); 
посмотреть можно функцией getpeername()
PM MAIL WWW MSN   Вверх
Enelar
Дата 28.1.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вы видимо не совсем верно поняли вопрос.
Вот у нас есть SOCKET local - тот сокет который мы проверяем на входящие сообщения.
SOCKET ClientsSocket[10000];
struct sockaddr ClientsAddr[10000];

Вот, мы поключили 1000 клиентов, получили их данные.
Далее через n секунд пришел пакет на наш порт.
Мы проверили local - пришло сообщение. Вопрос от какого из 1000 клиента.
PM MAIL   Вверх
Олег2005
Дата 29.1.2009, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

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



Если я неверно понял - значит так объяснили.
У сервера есть слушающий сокет - постоянный на все время работы сервера
Это тот сокет, для которого выполняется listen()
Проверить сразу, при получении заявки на соединение - невозможно - так как вся информация, поступающая во время троекратного рукопожатия, хранится в таблице подключений моуля TCP - и доступ туда с  уровня пользователя невозможен
Скорее всего это и есть ваш local
Но на слушающий сокет СООБЩЕНИЯ НЕ ПРИХОДЯТ - они приходят только на клиентский.


Это сообщение отредактировал(а) Олег2005 - 29.1.2009, 00:32
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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