|
Модераторы: feodorv |
|
Townsmen |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
Всем привет! Столкнулся з проблемой:
Как нужно правильно принимать новые подключения в многопользовательском сервере? Я использую бесконечный while цикл но он останавливается функцией accept() и ждет нового клиента, а мне нужно что бы цикл работал дальше и проверял приходят ли новые сообщения от подключенных клиентов... Как правильно написать реализовать роботу сервера? Схема на рисунку: Присоединённый файл ( Кол-во скачиваний: 9 ) server.jpg 25,41 Kb |
|||
|
||||
boostcoder |
|
|||
pattern`щик Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
в твоем случае, тебе нужно твой цикл с аксептом поместить в отдельный поток.
либо использовать ioctlsocket() с опцией FIONBIO. это позволит использовать неблокирующий режим сокетов. читать тут: http://msdn.microsoft.com/en-us/library/ms...3(v=vs.85).aspx там и экзампл есть. либо использовать asio::acceptor::async_accept(). Добавлено через 14 минут и 5 секунд и вообще, перейди сюда: http://msdn.microsoft.com/en-us/library/ms...5(v=VS.85).aspx и прочти абсолютно все. все вопросы отпадут. Это сообщение отредактировал(а) boostcoder - 11.9.2011, 17:35 |
|||
|
||||
boostcoder |
|
|||
pattern`щик Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
да, и select() не забудь. Добавлено через 2 минуты и 3 секунды тут есть пример сервера: http://www.win32developer.com/tutorial/win...tutorial_7.shtm Добавлено через 2 минуты и 39 секунд http://www.win32developer.com/tutorial/win...tutorial_8.shtm |
|||
|
||||
Townsmen |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
Спасибо) Информации предостаточно
boostcoder, профессионал в сокетах! |
|||
|
||||
boostcoder |
|
|||
pattern`щик Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
||||
|
||||
Townsmen |
|
||||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
запустил поток. Как остановить его?
|
||||
|
|||||
Леопольд |
|
|||
Опытный Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: нет Всего: 13 |
Сделать из него return по определённому условию.
-------------------- вопросов больше чем ответов |
|||
|
||||
Townsmen |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
а подробней? где нужно записать условие? если функция int то return 1, а если dword? Это сообщение отредактировал(а) Townsmen - 13.9.2011, 17:28 |
|||
|
||||
Townsmen |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
уже разобрался с завершением потока
Теперь другой вопрос: как узнать, что клиент разорвал связь с сервером(закрыл приложение) или связь разорвалось по другой причине....мне нужно знать сколько подключено клиентов и в случае разрыва связи уменьшать количество на единицу? |
|||
|
||||
Townsmen |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 65 Регистрация: 20.7.2011 Репутация: нет Всего: 1 |
теперь понял, recv возвращает 0 или -1
|
|||
|
||||
RatHat |
|
|||
Вождь индейцев Профиль Группа: Участник Сообщений: 234 Регистрация: 5.9.2005 Репутация: нет Всего: 1 |
если я не ошибаюсь, recv возвращает либо число принятых байт, либо код ошибки.
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i |
|||
|
||||
Олег2005 |
|
|||
Опытный Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
||||
|
||||
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |