Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Сети > Взаимодействие клиентов |
Автор: kleks 2.5.2007, 20:56 | ||
Есть сервер, к которому подсоединяются два клиента...как мне в данном случае, организовать обмен информацией между этими клиентами??? заранее благодарен... Исходник сервера:
|
Автор: GremlinProg 2.5.2007, 23:25 |
Если подразумеваются только 2 клиента, то нет смысла в сервере, если это чат, то нужно продумать список команд, на которые сервер будет отвечать, например: 1. Зарегистировать пользователя(собрать минимум информации: ip, имя и т.п.) 2. Войти в чат(уже зарегаленный пользователь) 3. Получить список активных пользователей 4. Отправить сообщение пользователю № x, из этого списка 5. Получить список сообщений текущего пользователя (простой вариант, но не выгодный для сервера) 6. "Я живой" (посылает клиент по истечению, например 10-20 сек) Я предлагаю вариант, при котором не нужно постоянно слушать клиента, сервер и клиент обмениваются короткими пакетиками, чтобы не сильно нагружать/усложнять сервер. (для небольшого числа клиентов, даже потоки не понадобятся) 1 и 2 можно объединить, но тогда клиенту придется каждый раз заполнять лишние поля, а так, сервер просто запоминает у себя в списке очередного клиента и маркирует его флагом "активен", а при входе пробегает по этому списку, сверяя поле IP с клиентом, если есть совпадение, то включаем активность. 3 - клиент сам посылает серверу этот запрос, сервер просто пробегает по списку пользователей, проверяя флаг "активен" и посылает минимум этой инфы клиенту. 4 - клиент говорит серверу, мол передай вот тому юзверю то-то... и то-то... Сервер пробегает по тому же списку и ищет этого пользователя, если он активен, то добавляет в список сообщений новое. 5 - Если использовать простой подход, где сервер хранит все сообщения у себя, то клиент, например каждые 30-60 сек, или чаще, посылает этот запрос серверу, сервер отвечает списком сообщений, которые ищет опять же по своей мини-базе клиентов.(запросы 4 и 5 работают с одним и тем же списком сообщений) 6 - Реализовывать не обязательно, но можно, чтобы знать, какие пользователи активны, а какие - нет, если сервер не получил пакет в заданное время, то он устанавливает клиента в состояние неактивен, при последующих запросах списка пользователей от остальных клиентов так можно будет довольно просто вести список именно активных. Тут можно еще организовать нечто, наподобие кукес, т.е. вместо IP (его лучше вообще не использовать при идентификации) генерировать случайную последовательность, "ключ", который впоследствии сохраняется на обеих сторонах и предоствавляется каждый раз при входе или запросе. ну как, идея понятна? |