Проблема в том, что при использовании графического интерфейса PYQT5 на стороне сервера я не могу отправлять команды на удаленно управляемые устройства (агенты на хосте) и отправлять результаты (информацию) обратно на сервер с идентификацией клиента. У клиентов не будет графического интерфейса. Мне придется выбирать, какие клиенты получат определенные команды на основе идентификации клиента или сеанса. Я использую конструктор Pyqt5, и мой код на Python отделен от основного приложения.
Сценарий заключается в том, что у меня есть структура обработки инцидентов сетевой безопасности pyqt5, которая запускает сервер, а затем просматривает соединения. Затем у меня есть агент python (client.py), который снова подключается к серверу. Соединение происходит, и в настоящее время я могу отправить клиенту только одну команду (одну переменную) и передать результаты обратно в фреймворк. Я не могу отправить несколько команд нескольким клиентам на основе идентификатора клиента или сеанса.
Одна из самых больших проблем заключается в том, что у меня есть работающий терминал в графическом интерфейсе моего сервера, и я не могу передавать текст QLineEdit клиентам на основе сеансов. Если я добавлю ввод python (->), то все будет отлично работать, однако пользователи не смогут использовать графический интерфейс, и я хочу, чтобы пользователи использовали графический интерфейс.
пока я работаю над решением, мои примеры кода расположены ниже
https://github.com/jinverar/multiconn-client-server
и пример кода на github основан на следующем руководстве по python
https://realpython.com/python-sockets/#application-client-and-server
Основные ссылки, которые помогли мне больше всего, перечислены ниже.
PyQt5: отправка и получение сообщений между клиентом и сервером
https://github.com/jinverar/TCP-ReverseShell
Соединение сервер-клиент в PyQt
http://www.mranuran.com/blog/2017/08/04/creating-graphical-chat-application-using-pyqt-and-socket/
Некоторые дополнительные ссылки, которые помогли мне до сих пор, перечислены ниже.
https://www.riverbankcomputing.com/static/Docs/PyQt5/gotchas.html
https://het.as.utexas.edu/HET/Software/PyQt/qabstractsocket.html#setSocketDescriptor
http://www.mranuran.com/blog/2017/08/04/creating-graphical-chat-application-using-pyqt-and-socket/
https://www.zeolearn.com/magazine/getting-started-guis-with-python-pyqt-qthread-class
Следующие шаги были рекомендованы для продвижения вперед и являются возможным решением.
1) вместо расширенного графического интерфейса создайте чрезвычайно простой интерфейс с кнопкой - когда вы нажимаете кнопку, он отправляет сообщение на сервер - затем нажмите кнопку более одного раза, возможно, отправив значение счетчика для каждого нажатия кнопки на server таким образом вы можете проверить непрерывность соединения.
2) Затем на сервере сделайте что-то подобное и посмотрите, может ли сервер отправить сообщение функции приема вашего клиента, и в обоих случаях просто напечатайте, что вы получили сообщение - это должно помочь вам устранить эти перегибы, а затем вы можете построить оттуда.
следующие пункты являются дополнительным руководством.
1) Сторона сервера должна работать как служба на сервере - без графического интерфейса и изначально просто отправлять вывод в обычное окно консоли.
2) Простой графический интерфейс с Client-Communicator, который вы сначала делаете, убедитесь, что вы можете отправлять несколько сообщений на сервер, и он получает их все
3) Затем вы создаете простой графический интерфейс сервера, который общается с вашей сервисной программой (или вы можете интегрировать ее, если не знаете, как это сделать), затем несколько раз нажимаете кнопку, чтобы убедиться, что вы разговариваете с клиентом в порядке.
После того, как вы это сделаете, вы должны протестировать и запустить коммуникатор, а затем мы просто подключим более надежную функциональность и более полные графические интерфейсы.
Затем 1) Создайте коммуникатор как услугу
2) Добавить аспект API в коммуникатор
3) Создайте графический интерфейс для выполнения команд
4) Попросите графический интерфейс отправить информацию в коммуникатор через вызов созданного вами API.
сделать это
1) Реализовать Сервис нажатием кнопки, если он еще не реализован
2) Запустить/остановить службу через звонок
3) Получить данные от этой службы (или, в вашем случае, отправить данные и получить данные от)