|
0 / 0 / 1
Регистрация: 10.09.2020
Сообщений: 28
|
|||||||||||
Сервер, принимающий запросы от нескольких клиентов10.09.2020, 15:08. Показов 2017. Ответов 13
Доброго времени суток.
В си я не очень хорошо разбираюсь, но появилась необходимость создать сервер, который принимал бы данные от нескольких клиентов и записывал данные в отдельные файлы. На данный момент написан сервер, который принимает данные от одного пользователя, но как сделать это для нескольких, я не могу понять и гугл мне пока что не смог с этим помочь. Поэтому прошу помощи и заранее выражаю огромную благодарность тем, кто ответит. Далее привожу имеющийся код: Сервер
0
|
|||||||||||
| 10.09.2020, 15:08 | |
|
Ответы с готовыми решениями:
13
Поставить сервер в режим ожидания нескольких клиентов Задача: сделать сервер для нескольких клиентов Один jsp с содержанием, принимающий все http-запросы к сайту. |
|
48 / 46 / 18
Регистрация: 27.04.2016
Сообщений: 169
|
|
| 14.09.2020, 17:46 | |
|
Если нет жесткого требования работать с UDP, то все это легко реализуется с помощью TCP. Создаем сокет, который принимает запрос на подключение от клиента, а потом, после установления контакта, запускаем отдельный поток/процесс, который непосредственно общается с клиентом.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 14.09.2020, 17:53 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 10.09.2020
Сообщений: 28
|
|
| 14.09.2020, 18:03 [ТС] | |
|
Нужно именно для UDP. Вроде как можно использовать для этой цели select, но пока я до конца не разобралась как это должно работать. Поэтому вопрос можно немного переформулировать. Как реализовать select при UDP протоколе?
Добавлено через 7 минут На этот вопрос у меня пока нет ответа, в любом случае нужно, чтобы сервер не отключался после первого соединения с клиентом, а был готов либо к повторному соединению. Возможно вопрос сформулирован не совсем верно.
0
|
|
|
48 / 46 / 18
Регистрация: 27.04.2016
Сообщений: 169
|
|
| 14.09.2020, 18:03 | |
|
Здесь Vourhey правильно подметил, что нужно этих клиентов друг от друга различать. В UDP это можно сделать с помощью сравнения IP-адреса и порта того, от кого пришел пакет. Для этого естественно нужно держать список клиентов, которые уже присылали пакеты, а нового клиента добавлять в этот список. Для того, чтобы понять, как использовать select достаточно посмотреть пример в man select.
1
|
|
|
0 / 0 / 1
Регистрация: 10.09.2020
Сообщений: 28
|
|
| 16.09.2020, 12:19 [ТС] | |
|
Я понимаю, что нужно проводить сравнение, но абсолютно не понимаю механизм реализации этого процесса. Где можно почитать про это или может есть примеры исполнения такой задачи?
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 16.09.2020, 12:26 | |
|
annaifel, предпоследний и последний параметры функции recvfrom.
1
|
|
|
0 / 0 / 1
Регистрация: 10.09.2020
Сообщений: 28
|
|
| 18.09.2020, 12:37 [ТС] | |
|
Спасибо за ваши ответы.
![]() Но как мне помогут порты, если они динамически назначаются, и два последовательных обращения с одного клиента к серверу происходит с разных портов. Ведь тогда сервер будет одного и того же клиента воспринимать как разных? Или порты должны быть заданы статически у каждого клиента? Или я не понию чего-то очевидного?
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 18.09.2020, 12:58 | |
|
annaifel, на порты ориентироваться не нужно. Либо разделяешь клинтов по айпи. Либо расширяешь свой формат сообщений, чтобы клиент присылал в каждом сообщении ключ, который позволяет его идентифицировать.
1
|
|
|
0 / 0 / 1
Регистрация: 10.09.2020
Сообщений: 28
|
|||||||||||
| 24.09.2020, 09:48 [ТС] | |||||||||||
|
Появился новый вопрос по этой теме. На одном компьютере клиент и сервер общаются прекрасно, но как только клиент был перенесён на другой компьютер в той же локальной сети, тогда и данные с клиента перестали приходить на сервер. Что может быть не так? Читала про то, что проблема может быть в брандмауэре, отключала, не помогло.
Сервер:
0
|
|||||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 24.09.2020, 10:35 | |
|
annaifel, чтобы не гадать, пингануть сервер с клиента, чтобы убедиться, что хост находится. Посмотреть вывод iptables - L на сервере. Научиться работать с Wireshark и посмотреть пакеты приходящие на порт. Код не смотрел)))
1
|
|
|
0 / 0 / 1
Регистрация: 10.09.2020
Сообщений: 28
|
|
| 24.09.2020, 14:06 [ТС] | |
|
Клиент не может подключиться к серверу (connect: Network is unreachable), а сервер назначает себе ip 0.0.0.0, хотя на самом деле у него должен быть другой ip. Вывод iptables -L на сервере ничего не выдаёт, кроме ошибки, но тут ещё есть сложность в том, что работаю не на полноценной linux'овской ос, а на wsl, и не знаю, где искать недостающий каталог, который он от меня хочет получить. Также на сервере я задаю один порт, а использует он другой, что тоже пока непонятно.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||
| 24.09.2020, 14:35 | ||||
![]() Добавлено через 1 минуту
1
|
||||
|
0 / 0 / 1
Регистрация: 10.09.2020
Сообщений: 28
|
||
| 24.09.2020, 14:46 [ТС] | ||
|
0
|
||
| 24.09.2020, 14:46 | |
|
Помогаю со студенческими работами здесь
14
Сервер UDP принимающий/передающий пакеты от всех/всем клиентам Серверное приложение, обслуживающее запросы клиентов по протоколу HTTP Запросы: сумма заказов клиентов за выбранный промежуток времени Серверное приложение WinAPI, обслуживающее запросы клиентов по протоколу ТСР Работа с базой нескольких клиентов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|