Страница 1 из 1

Обмен данными через сокет

Добавлено: 13 Октябрь 2006, 14:56
AVA
В пускаче Владимира Дегтяренко реализован обмен данными через сокет между клиентом и сервером. Клиент цепляется к серверу, получает ответ и разрывает соединение. Сервер для передачи данных клиенту создает новый сокет.
Как сделать многопользовательский режим - чтобы несколько клиентов цеплялись к серверу, а он читал и передавал данные выбранному клиенту без разрыва соединения с остальными?
У меня сервер читает из сокета только от последнего подцепившегося клиента, для других выдает ошибку 10035 (ресурс временно недоступен).
Что-то нужно поправить в настройках, или нужно для каждого клиента создавать отдельный поток и сокет?
Как связаться с Владимиром Дегтяренко?

Добавлено: 13 Октябрь 2006, 15:21
StillZero
есть определенные схемы работы с сокетами, порядка 5 штук, чтобы определиться что тебе нужно, надо достаточно много прочитать

что помню:
1. блокирующие сокеты и select - на каждого клиента по потоку
2. неблокирующие сокеты и WSAAsyncSelect - один поток
3. неблокирующие сокеты и WSAEventSelect (аналог WSAAsyncSelect)
4. неблокирующие сокеты и порты перекрытия (по моему называются IO completion port)

для понимания, самая простая схема первая, самая мега рульная четвертая, четвертая подробно описана во многих местах, есть в MSDN

полезно почитать rsdn.ru, там сетевым делам отдельный форум посвящен

для небольшого количества клиентов подходит вторая схема

вообще ошибка WSAEWOULDBLOCK (10035) означает, не то что "ресурс временно недоступен", а то, что "операция не может быть выполнена прямо сейчас", и является по сути не ошибкой, а предупреждением, обычно как раз появляется в схеме с WSAAsyncSelect