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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tcp сервер с приоритетным клиентом, у клиента должен быть приоритет на подкл 
:(
    Опции темы
Dika
Дата 5.2.2013, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кодю не под Виндовс, но библиотека похожа на WinSock. У меня однозадачная ОС, для него пишу TCP сервер. Есть 2 клиента. Один клиент (первый) должен обладать приоритетом на работу с сервером, т.е .если сервер обрабатывает запрос от второго клиента, а в это время пришел запрос от первого, то сервер должен прервать текущую операцию, закрыть соединение и открыть соединение для работы с первым клиентом. Как это сделать?
Сервер у меня с функцией select(). Может я не правильно понимаю, поправьте: в select  есть очередь из клиентов, кто первый пришел, с тем и работает сервер. Как бы в течение работы программы проверять эту очередь, и если есть нужный клиент, то флаг выставлять. Если есть примеры с библиотекой Winsock, давайте, буду перерабатывать под "мое" железо.

перефразирую: как определить запрос на подключение к серверу и пока не устанавливать подключения?

Это сообщение отредактировал(а) Dika - 5.2.2013, 14:17
PM MAIL   Вверх
feodorv
Дата 5.2.2013, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Какие проблемы? Работайте с неблокируемыми сокетами. И максимум двумя сокетами - одним прослушиваемым, другим присоединённым.
Перед каждым read/write/recv/send вызывайте select. Если select даст знать, что привилегированный клиент готов присоединится, закрывайте текущее соединение (если оно открыто), открывайте новое с этим привилегированным клиентом.

Добавлено через 13 минут и 8 секунд
Не идеальный, но подходящий код.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Dika
Дата 5.2.2013, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня есть долгая операция, занимает 30 сек - это передача файла, не смейтесь. Когда приходит запрос на передачу файла, я его читаю по частям и передаю, т.е. считала часть, передала, считала еще часть, передала и так до конца файла. И в то время, как я передаю файл, может постучаться первый клиент, операцию которого сервер не может не выполнить. вот. сервер физически не может прийти в select, он в цикле передачи файла. В моей машине есть функция прерывания по таймеру, т.е. через заданые промежутки времени я могу сделать какие-либо операции. Так вот, я хочу по прерыванию проверять, если запрос на подключение от нужного клиента, если да, то прервать все операции и выполнить приоритетную.

feodorv, неблокируемые сокеты вряд ли подойдут, нужна гарантированая доставка, но только проверка функции select не дает еще соединения, надо попробовать.

Это сообщение отредактировал(а) Dika - 5.2.2013, 21:05
PM MAIL   Вверх
feodorv
Дата 6.2.2013, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(Dika @  5.2.2013,  22:01 Найти цитируемый пост)
feodorv, неблокируемые сокеты вряд ли подойдут, нужна гарантированая доставка

Как одно зависит от другого?  smile 

Цитата(Dika @  5.2.2013,  22:01 Найти цитируемый пост)
сервер физически не может прийти в select

Как раз с неблокируемыми сокетами может. Вы код смотрели? Видели как там в момент работы (чтение/запись) с несколькими клиентами организуется ещё одно соединение с ещё одним клиентом?

Откройте для себя мир неблокируемых сокетов!!!)))
И, на самом деле, они легко решают проблему...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Dika
Дата 6.2.2013, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



feodorv, ой, я и работаю с неблокирующими сокетами, перепутала с UDP протоколом.  Код еще не разбирала, не дошла.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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