Russian Qt Forum
Ноябрь 23, 2024, 08:15
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Многопоточный файл-сервер
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Многопоточный файл-сервер (Прочитано 2148 раз)
Fregloin
Супер
Offline
Сообщений: 1025
Многопоточный файл-сервер
«
:
Август 09, 2014, 13:39 »
Добрый день. Опишу в кратце задачу, а потом буду рад услышать советы.
Нужно создать свой файл-сервер. Файлы произвольного формата, сервер ведет список доступных файлов в определенной папке, + помнит их CRC32 (вычисляет при добавлении/обновлении файла).
Клиент при подключении к серверу получает список файлов, сравнивает crc32 с локальными файлами, и если есть отличия - загружает те, которые обновлены.
Клиентов порядка 30 штук, но может быть и больше. Запросы на файлы будут не очень частыми, но и не редкими, т.е. в один момент времени может читать несколько клиентов.
Так же сервер должен принимать новые файлы от клиентов и обновлять их в своей папке и вычислять crc32 этих файлов.
Какая идея.
С передачей файлов от клиента на сервер и обратно разобрался в отдельных простых приложениях.
Теперь надо собрать все в кучу.
Как я сделал. Создал наследника от QTcpServer, в incomingConnection создаю объект сессию, передаю ему дескриптор сокета.
А вот с сессиями нужно разобраться немного по подробнее.
Сессия должна поддерживать такие функции
-возвратить список файлов клиенту при запросе (сделано)
-загрузить файл на клиента
-получить файл с клиента.
При загрузке/получения я создаю дополнительный QTcpServer, номер открытого порта отправляю клиента, клиент создает дополнительное соединение по этому порту, и начинает заливать/скачивать файл по этой связи. QDataSream не использую, все сырые байты (для того что может быть будут подключения не от Qt программ).
Собственно вопрос. Раньше я пытался в каждой сессии при запросе скачать/выкачать файл создавал передачу и прием в отдельном потоке, но при работе шла ругань на разные потоки при работе с сокетами. Отказался от дочерних потоков в сессиях, все вроде бы заработало. Но терзают сомнения, правильно ли я сделал.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Многопоточный файл-сервер
«
Ответ #1 :
Август 09, 2014, 13:45 »
Цитата: Fregloin от Август 09, 2014, 13:39
Отказался от дочерних потоков в сессиях, все вроде бы заработало. Но терзают сомнения, правильно ли я сделал.
Правильно, для такой задачи не нужны никакие рабочие потоки: получил - записал.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...