• Как открыть localhost для общей сети?

    @res2001
    Developer, ex-admin
    Как только ты дашь доступ из интернета к этому приложению по советам выше, приложение сразу же начнут ломать.
    Если приложение изначально не создавалось для работы в интернете, то скорее всего рано или поздно в нем найдут баг и сломают. А дальше может быть что угодно: внедрение шифровальщика/вымогатора, использование твоего компа в бот сети и т.п. не приятные вещи.

    Поэтому для приложений, предназначенных для использования в относительно безопасной локальной сети, стоит использовать ВПН, а не прямой доступ из интернета.
    Ответ написан
    3 комментария
  • Как в Windows, подключится сразу двумя пользователями к одному сетевому диску?

    @res2001
    Developer, ex-admin
    Надо "разлогиниться" и залогинится пользователем 2.
    Ответ написан
    3 комментария
  • Ввод текста с++?

    @res2001
    Developer, ex-admin
    Библиотека называется WinAPI.
    Видимо нужно найти нужное окно (по каким-то признакам) и начинать посылать туда сообщения о нажатии клавиш.

    Собственно к С++ эта задача особого отношения не имеет. Та же логика, видимо, была у вас и в питоне, только там все это уже было запрятано в готовую библиотеку. На плюсах может и есть такая готовая библиотека, но точно это не стандартная библиотека, надо искать что-то стороннее.
    Разных библиотек в исходниках и без на плюсах и Си очень много. Гуглите.
    Ответ написан
    Комментировать
  • Как вывести кириллицу в c++?

    @res2001
    Developer, ex-admin
    lololoshka_1991, Если совсем просто, то пиши исходники в кодировке cp866. Кодировка консоли по умолчанию как раз такая в русской винде. Но в этом случае и запускай программу руками из консоли, т.к. тот же MSVS может менять кодировку консоли при запуске программы из него.
    Так же кодировка консоли может меняться и командой в самой консоли. Например: chcp 1251
    В винде по умолчанию может быть 3 варианта кодировок с поддержкой кириллицы: cp866, cp1251, UTF8.

    Что бы сделать программу независимой от кодировки консоли, то придется заморочиться. Готового решения не встречал. По уму надо делать так: пишем исходники в UTF8, в программе узнаем кодировку консоли (WinAPI позволяет это делать), перед выводом весь текст перекодируем в кодировку консоли, после ввода весь ввод перекодируем в UTF8. Внутри программы работаем только с UTF8. Для хранения строк в программе использовать wchar_t, wstring и т.п. Функции перекодирования в WinAPI так же присутствуют.

    Кстати в плюсах есть метод std::basic_ios.imbue(), который позволяет задавать кодировку потока. Можно попробовать поиграть с этим. Но вообще менять кодировку консоли из программы - плохо, т.к. пользователь консольной программы может ждать ответ от запускаемой программы в конкретной кодировке. Это широко используется при написании батников и т.п. скриптов. Например большая часть виндовых команд корректно выводит текст не зависимо от того какая кодировка в консоли. Тот же dir, например.
    Ответ написан
    Комментировать
  • Как отправить байт(ы) в COM-порт?

    @res2001
    Developer, ex-admin
    Сохраните ваши командные байты в файлы в двоичном виде.
    Отправить файл в последовательный порт можно так:
    type file.dat >COM1
    Ответ написан
    1 комментарий
  • Как удалить все строки после 10й строки?

    @res2001
    Developer, ex-admin
    Есть специализированная команда head, с помощью которой можно вывести N первых строк файла:
    head -q -n 10 file.txt >file_new.txt
    rm file.txt
    mv file_new.txt file.txt
    Ответ написан
  • Обход Dom дерева как то относится к дискретной математике?

    @res2001
    Developer, ex-admin
    Изучайте, конечно. Прирост даст, но не в обходе ДОМ.
    ДОМ и так что-то из этого уже использует под капотом, вы этим пользуетесь, вызывая стандартные методы.
    Ответ написан
    Комментировать
  • Как раздать серые ip провайдера в локальную сеть?

    @res2001
    Developer, ex-admin
    Обычно, когда вы арендуете целиком подсеть, то у вас есть эта подсеть + еще какой-то белый адрес не из этой подсети, который выдается оператором для внешнего интерфейса и через который будет происходить маршрутизация вашей подсети оператором. Соответственно на шлюз на внешний интерфейс вешается этот отдельный адрес, а в локальной сети назначаете адреса из подсети (статически или через DHCP). Т.е. все то же самое, как и при использовании серых адресов, только в случае с серыми адресами подсети их вам никто не выдает (выбираете любой диапазон по собственному усмотрению) и вы обязаны использовать NAT для выхода в интернет.

    Если же у вас только подсеть, то используйте ответ Andrey Barbolin
    Ответ написан
    1 комментарий
  • Как передать динамический массив в функцию?

    @res2001
    Developer, ex-admin
    sizeof(chars) в результате дает размер указателя (8 - для x64 систем, 4 - для х32 систем), а не размер строки. Чтоб получить размер строки надо его передать в функцию (str.size()) или вызвать strlen уже внутри.
    sizeof(*chars) всегда в результате равен 1, т.к. размер char по стандарту 1 байт.

    Вам не нужно 2 цикла. Я так понимаю, вы хотели различать четное и не четное количество символов в строке.
    Но если количество элементов четное, то мы должны обработать все элементы массива при этом количество итераций цикла будет strlen(chars)/2. А если количество элементов не четное, то центральный элемент мы пропускаем и количество итераций будет то же strlen(chars)/2, за счет того, что тут используется целочисленное деление и остаток от деления отбрасывается.

    В функцию можно передавать ссылку на объект string, а не сырой массив (c_str()). string позволяет обращаться на прямую к каждому символу отдельно с помощью операции индексации (str[i], так же как и сырые массивы). При этом возвращать что-либо из функции не нужно, т.к. вы будете манипулировать непосредственно данными самого объекта и все изменения будут видны в main.
    Ответ написан
    Комментировать
  • Как упростить проверку на правильность круглых скобок?

    @res2001
    Developer, ex-admin
    Просто считайте количество открывающих скобок и количество закрывающих. Причем, если на закрывающей скобке количество открывающих <= количества закрывающих, то ее не учитываем (или учитываем в ошибках закрывающих скобок), т.к. нет парной открывающей.
    Ошибки по открывающим скобкам будут, если в конце количество открывающих > количества закрывающих, количество ошибок открывающих скобок в этом случае = количество открывающих - количества закрывающих.
    Количество правильных скобок == количеству закрывающих (т.к. не правильные закрывающие мы не считаем).
    Ответ написан
    Комментировать
  • Какой софт есть для RDP подключений windows->windwos аналог remmina?

    @res2001
    Developer, ex-admin
    RDP подключения можно сохранять как *.rdp файл. Заводите каталог с набором RDP файлов. Все.
    Ответ написан
    Комментировать
  • Как изменить имя выходного файла через CMakeLists.txt?

    @res2001
    Developer, ex-admin
    На счет имени таргета посмотрите тут: https://stackoverflow.com/questions/31038963/how-d...
    С каталогом, ну я бы в проекте сделал подкаталог MyDir и в нем свой cmakelists.txt с описанием таргета для библиотеки. Библиотека будет собираться в своем подкаталоге. В корневой cmakelists.txt включать подкаталог с помощью add_subdirectory(MyDir)
    Ответ написан
    1 комментарий
  • Почему не полностью отзывается клиент?

    @res2001
    Developer, ex-admin
    Что клиент подключается к серверам с разными ключами? Ну тогда надо отзывать и второй клиентский ключ.

    Вообще в вашей конфигурации нет смысла создавать клиентам разные ключи. Вам ничто не мешает синхронизировать клиентские ключи на серверах, точно так же как и список отзыва.
    Кстати для списков отзыва есть протокол OCSP, позволяющий проверять списки отзывов по сети. В этом случае отпадает необходимости передавать файлы со списком отзыва по серверам. Но тут, конечно, надо заморочиться с поднятием и поддержкой OCSP сервера и нужно указывать URL OCSP при создании сертификатов.
    Ответ написан
  • Можно ли подключится к удаленному реестру Windows под определенным пользователем?

    @res2001
    Developer, ex-admin
    Если выключить UAC на удаленном компе, то можно, зная логин/пароль админа, естественно.
    При удаленном подключении нет возможности повысить привилегии процесса, как это происходит при локальном запуске приложения.
    Не выключая UAC того же самого можно добиться установив ключ реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicy в 1. Если такого ключа нет, то его надо создать по указанному пути с типом DWORD. Он отключает UAC при сетевых подключениях и повышение привилегий не требуется.
    Для справки: https://learn.microsoft.com/ru-ru/troubleshoot/win...
    Ответ написан
    Комментировать
  • Как исправить Error C4700: использована неинициализированная локальная переменная "x"?

    @res2001
    Developer, ex-admin
    Переменная x при определении не инициализируется. Впервые в коде встречается в этой строке:
    y = pow(x, k * 1) + fabs(pow(sin(x), 2) + sqrt(1 + pow(sin(x), 3)));

    Т.е. вы что-то пытаетесь вычислить используя данные из переменной х. Какое значение имеет переменная x в этом выражении? Т.к. вы не задаете значение переменной в программе до использования переменной, то переменная содержит любое произвольное значение, мусор.
    С переменной t все аналогично.
    Ответ написан
    Комментировать
  • Что означает синтакс const char *format [, argument]... в документации?

    @res2001
    Developer, ex-admin
    Функция с переменным числом аргументов, но минимально должен присутствовать 1 - format, все остальные опционально.
    Ответ написан
    1 комментарий
  • Какие протоколы нужно разрешить и какие не следует?

    @res2001
    Developer, ex-admin
    443 и 80 используются веб серверами (HTTP(S)), и это TCP. Тут UDP не используется.
    53 - это DNS запросы, могут быть как UDP (по умолчанию) так и TCP.

    На самом деле никто не мешает использовать любой порт любому протоколу (т.е. любое приложение может открыть любой порт если он не занят и хватает прав). Но то что я привел - это стандартная практика. Другое дело, что протоколы верхнего уровня обычно жестко связаны либо с TCP либо с UDP, но бывают исключения (тот же DNS).
    Ответ написан
    Комментировать
  • Как придумать архитектуру сервера на c++?

    @res2001
    Developer, ex-admin
    Можно на одну комнату один поток, тогда сокеты игроков делаете не блокирующими и используете асинхронные сетевые операции с двумя сокетами в одном потоке.
    Но если уж делать сокеты не блокирующими, тогда ничего не мешает в одном потоке обрабатывать сразу несколько комнат. Обычно создают пул потоков по количеству ядер процессора и размазывают всю нагрузку по всем потокам. Но надо добиться того, чтобы обработка данных игроков в одной комнате происходила в одном же потоке, так избавитесь от разделяемых данных и не надо будет синхронизировать потоки (мьютексы и т.п.).
    Ответ написан
    Комментировать
  • Как правильно подключать make-файл из одной директории к make-файлу из другой?

    @res2001
    Developer, ex-admin
    При включении с помощью include так и делают, т.к. для включенного makefile текущим каталогом будет каталог откуда вызван первичный makefile, а отсюда файлы в подкаталоге доступны только с указанием пути. include же по сути просто вставляет текст одного файла в другой и все.
    Другой вариант - не использовать include, а запускать make рекурсивно для каждого подкаталога с переходом в этот подкаталог (вроде ключ -с в make).
    Ответ написан
    Комментировать
  • В каких случаях логичней чтобы получить половину умножать на 1/2, а в каких делить на 2?

    @res2001
    Developer, ex-admin
    Есть такие микроконтроллеры, где нет аппаратного деления. Оно там реализовывается программно и работает оооочень долго. Вот прям заметно дольше. И если деление на константу идет в цикле, то в таком случае выгоднее один раз перед циклом вычислить 1/2, а затем умножать на результат деления. 1/2 тут для примера, конечно.
    С подобными процами лично сталкивался и был неприятно удивлен фактом такой просадки производительности на делении.
    В общем случае, даже на современных настольных процах от интел или амд операция деления выполняется дольше умножения. Счет идет на несколько процессорных тактов. Иногда это может играть роль.

    Если же речь о целочисленном делении на 2, то тут эта операция заменяется сдвигом вправо на 1 бит, что работает быстрее и умножения и деления. Впрочем подобные вещи компилятор сам в состоянии сделать при включенной оптимизации.
    Ответ написан
    Комментировать