Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 11

Как правильно работать с сокетами и потоками

16.02.2016, 23:31. Показов 2428. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть сервер и пара клиентов, которые к нему подключаются... Использую потоки, -каждый сокет в своем потоке. Клиенты передают на сервер данные (файлы, например). Клиент1 передал Файл1, а Клиент2 передал Файл2... Сервер принял Файл1 и Файл2. Проблем с реализацией не возникло...

Вопрос! Возможно ли объединить данные из сокетов и обработать их по некоторому алгоритму, чтобы в итоге, передать на сервер только один новый Файл3? И с помощью каких средств это лучше реализовать?...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.02.2016, 23:31
Ответы с готовыми решениями:

Qt. как в протоколе UDP работать с несколькими сокетами?
Доброго времени суток! Есть приложение, которое постоянно принимает данные и может работать на передачу. Для это сделан 1 сокет. Можно ли...

Как в QML TextArea заставить правильно работать кнопку TAB?
Если кинуть в QML GUI элемент TextArea и что - то в нём писать и попытаться сделать табуляцию (отступ), то вместо того, что бы это сделать...

Ньюансы. Как правильно работать с QGraphicsView, сценой и Item-ами?
Добрый день! Есть несколько вопросов, на которые интересуют ответы, не важно, на все ли вопросы вы можете ответить, хотя бы на...

16
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
17.02.2016, 08:43
Да. tar.
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 11
17.02.2016, 12:58  [ТС]
А можите конкретнее ответить на вопрос?...
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
17.02.2016, 13:13
Rida666, формировать tar архив.
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
17.02.2016, 13:31
Rida666, а можете конкретнее задать вопрос?
0
20 / 20 / 2
Регистрация: 27.01.2014
Сообщений: 232
17.02.2016, 13:47
Так сокеты и другая работа с сетью в Qt асинхронные. Нет смысла под сокет целый поток выделять.
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 11
17.02.2016, 21:30  [ТС]
Есть Сервер (QTcpServer, QTcpSocket) и два Клиента (QTcpSocket). Клиенты отправляют данные (файлы) на сервер, тот их принимает. Для передачи данных используется, естественно, сокетное соединение. Каждый сокет я поместила в отдельный поток (QThread), - иначе что-то не срабатывало. Таким образом на Сервер приходят файл1 и файл2.
Далее, мне надо чтобы Клиенты работали в прежнем режиме – отправляли файлы на Сервер, но на Сервер должен приходить один файл3, который формируется, согласно некоторому алгоритму, из файла1 и файла2.
Собственно, вопрос… как выцепить данные из разных потоков/сокетов чтобы, обработав их, отправить далее на Сервер?
Я думаю использовать для этого сигнально-слотовый подход… каждый поток отправляет данные emit sentData(QByteArray), которые принимает, копит, обрабатывает и отправляет на Сервер – слот. Пока идея в процессе реализации и что-то не срастается… Является ли данный подход правильным и оптимальным?...
0
20 / 20 / 2
Регистрация: 27.01.2014
Сообщений: 232
17.02.2016, 22:13
Каждый сокет я поместила в отдельный поток (QThread), - иначе что-то не срабатывало. Таким образом на Сервер приходят файл1 и файл2.
Делал tcp server и tcp client тупо ориентируясь на книжку Шлее - все срабатывало, как надо. Только уже с передачей строк не маленького размера пришлось повозиться, но это не от того, что клиенты мешали друг другу.

По сабжу:
Ничего непонятно, ты клиенты отправляют файл 1 и файл 2, но если это не один и тот же самый клиент для обоих файлов, как какой-то из клиентов может сшить свой файл с файлом чужого клиента и отправить на сервер?
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,279
17.02.2016, 22:33
Не понятно, два клиента это отдельные программы или одна с двумя потоками?
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 11
17.02.2016, 22:56  [ТС]
alexu_007, два клиента - это отдельные программы
0
 Аватар для icpu
487 / 365 / 93
Регистрация: 10.03.2011
Сообщений: 1,513
Записей в блоге: 5
18.02.2016, 07:01
Rida666
Дано: две абстрактные программы в абстрактных местах планеты, пересылающие файл1 и файл2.
Найти: способ склеивать файл1 и файл2 в файл3 до прибытия на сервер.
Решение: сделать бочку

Если же мы переходим к требованию отправлять всё с одного пользователя одного компьютера, то всё, что нам необходимо - общая очередь для упаковки и отправки данных. Chromium, к примеру, для подобных задач имеет отдельный процесс, к которому все обращаются через pipes - именованные потоки.
Для такой задачи решение - при запуске приложения запускать себя же с особым ключём, делающим из программы локальный сервер по любому из протоколов (stdin/pipes/sockets/etc). Остальные оставляют запросы склеить файлы и отправить на сервер. Сервер набирает заказов, по таймауту их склеивает и отправляет на сервер. Если есть жажда мук, так и делайте, да ещё и сервисное общение с сервером оставьте у клиентов.
0
0 / 0 / 0
Регистрация: 28.10.2015
Сообщений: 11
03.07.2016, 22:47  [ТС]
Остались вопросы... Как в режиме реального времени узнать, есть ли данные в сокете?
Необходимо производить обработку данных в режиме реального времени только с тех клиентов, которые передают данные на сервер. При этом, данные могут начать или перестать поступать любой момент.
0
19 / 14 / 2
Регистрация: 24.06.2016
Сообщений: 127
Записей в блоге: 2
04.07.2016, 09:50
Цитата Сообщение от Rida666 Посмотреть сообщение
Остались вопросы... Как в режиме реального времени узнать, есть ли данные в сокете?
Необходимо производить обработку данных в режиме реального времени только с тех клиентов, которые передают данные на сервер. При этом, данные могут начать или перестать поступать любой момент.
Саммерфилд, глава , там ответы на все Ваши вопросы
0
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
04.07.2016, 20:46
Rida666,
C++ (Qt)
1
2
void QIODevice::readyRead()
qint64 QAbstractSocket::bytesAvailable() const
Все здесь:
http://doc.qt.io/qt-5/qabstrac... sAvailable
Лучшего описания нигде не найдете. Только исходники.
0
19 / 14 / 2
Регистрация: 24.06.2016
Сообщений: 127
Записей в блоге: 2
05.07.2016, 07:32
Цитата Сообщение от Amok Посмотреть сообщение
Лучшего описания нигде не найдете. Только исходники.
Лучшее описание у Саммерфилда. Он, как-бы, стоял у истоков Qt, кому как не ему объяснять?
0
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
07.07.2016, 15:24
Олег_Б, Саммерфилд, конечно, хорош, но он знает меньше, чем официальная документация Qt, уж поверьте))
0
19 / 14 / 2
Регистрация: 24.06.2016
Сообщений: 127
Записей в блоге: 2
07.07.2016, 19:23
Цитата Сообщение от Amok Посмотреть сообщение
уж поверьте)
уж поверю, что это бессмысленный спор. Думаю, Вы со мной согласитесь, Документация + Саммерфилд - намного лучше, чем то или иной по отдельности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.07.2016, 19:23
Помогаю со студенческими работами здесь

Как правильно работать с пробелами в пути к файлам в mingw32-make?
При попытке собрать библиотеку к драйверу нужно прописывать пути типа - C:\Program Files\MySQL\MySQL server 5.5\libs\libmysql.lib. В этом...

Как правильно работать с потоками?
Есть richTextBox, в который записываются все действия, совершаемые программой. В процессе запускается wget.exe через Process.Start() и в...

Как правильно работать с потоками в python?
Приветствую, немного пользовался потоками, но не хватает окончательного понимания как с ними совладать. python3 + django 1.9 При старте...

Как работать с сокетами в цикле?
Доброго времени суток. Подскажите как работать с сокетами в цикле. Нужно создать цикл. Клиент посылает запрос серверу, на что получает...

Общение между потоками с разными сокетами
Здравствуйте! Недавно начал заниматься сокетами, возникла задача сделать так, чтобы каждый пользователь подключавшийся к серверу получал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru