| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > Авторизация |
| Автор: Enelar 26.1.2009, 08:33 |
| Вопрос такой. Есть порт например 55555. Есть миллион клиентов подключенных к этому порту. На какойто итерации мы вызываем функцию recv(). Получили очередной пакет. Как нам понять от какого клиента пакет (если никакой информации в пакете о клиенте нет) |
| Автор: Олег2005 26.1.2009, 11:55 |
| Для каждого отдельного подключившегося клиента функция accept() создает присоединенный сокет, и адрес этого сокета (IP и порт)формируются в структуре адреса клиента int accept(int sd, struct sockaddr *client_addr, int *addrlen); посмотреть можно функцией getpeername() |
| Автор: Enelar 28.1.2009, 23:18 |
| Вы видимо не совсем верно поняли вопрос. Вот у нас есть SOCKET local - тот сокет который мы проверяем на входящие сообщения. SOCKET ClientsSocket[10000]; struct sockaddr ClientsAddr[10000]; Вот, мы поключили 1000 клиентов, получили их данные. Далее через n секунд пришел пакет на наш порт. Мы проверили local - пришло сообщение. Вопрос от какого из 1000 клиента. |
| Автор: Олег2005 29.1.2009, 00:18 |
| Если я неверно понял - значит так объяснили. У сервера есть слушающий сокет - постоянный на все время работы сервера Это тот сокет, для которого выполняется listen() Проверить сразу, при получении заявки на соединение - невозможно - так как вся информация, поступающая во время троекратного рукопожатия, хранится в таблице подключений моуля TCP - и доступ туда с уровня пользователя невозможен Скорее всего это и есть ваш local Но на слушающий сокет СООБЩЕНИЯ НЕ ПРИХОДЯТ - они приходят только на клиентский. |