• Суть макросов в с++?

    @res2001
    Никита Ярёменко, Но если очень надо, то можно и сделать :-)
    Пишите обычную функцию сортировки, так что бы она все возвращала через параметры. Отлаживаете функцию, чтоб она нормально работала. Затем просто подменяете функцию на макрос.
    Например, была функция:
    void mysort(int *arr, int size)
    {
    /* тут тело функции */
    }

    Входной массив arr является и выходным.

    Стал макрос:
    #define mysort(arr, size)   \
    do {                                   \
    /* тут тело функции  */     \
    } while(0)


    В принципе все.
    В do ... while(0) все завернуто по двум причинам:
    1. при выходе из цикла все переменные, объявленные внутри цикла уничтожаться и не будут влиять на вызывающий код.
    2. при использовании макроса можно ставить в конце точку с запятой, так будет выглядеть совсем как вызов функции
    3. Сам цикл компилятор в итоговом коде удалит, но все побочные эффекты останутся

    Как уже многие заметили в реальных проектах обычно так не делают, особенно на плюсах. Для подобного есть шаблоны.
    На Си еще можно иногда встретить подобный подход, но то же не часто. Например, видел реализацию "встраиваемого" списка и очереди в подобном стиле.
  • Подключение по VPN к RDP: почему не работает?

    @res2001
    PFrontEnd,
    могу достучаться до устройств в сети

    Т.е. другие устройства в сети доступны.
    Значит дело в фаерволе на RDP сервере, а не в маршрутизации.
    Просто добавьте правило разрешающее входящие соединения на TCP/3389 из ВПН сети.
  • Подключение по VPN к RDP: почему не работает?

    @res2001
    Сергей, 100% нужен маршрут на ВПН клиенте до локальной сети через ВПН сервер.
    Вся настройка, после того как ВПН клиент подключился к ВПН серверу и пинги между ними пошли, сводится именно к заданию нужных маршрутов и нужных правил фаервола.
    Напрямую к ВПН это уже не относится - это обычные действия для маршрутизирования трафика между сетями.
  • Суть макросов в с++?

    @res2001
    Никита Ярёменко,
    но в примерах использованы макросы для решения задач

    Согласен с Adamos
    Приведите пример использования макросов в задачах. Может ваш препод под макросами понимает что-то другое, чем мы.
  • Суть макросов в с++?

    @res2001
    Что за бред, товарищ! Вы случайно языки программирования не попутали?
    С упрощением синтаксиса я еще с натяжкой могу согласиться, хотя никогда не видел такого юзкейса в реальности. Но первый вариант - отборный бред.
  • Подключение по VPN к RDP: почему не работает?

    @res2001
    AlexVWill, Проброс портов конечно можно сделать, проблему с RDP это решит. А потом автор захочет доступ к локальному веб серверу или тупо шару виндовую по ВПН увидеть. То же проброс портов предлагаете делать?
  • Как создать VPN туннель?

    @res2001
    Что бы эта локальная сеть связывала только меня и мой пк без wifi.

    Связывала как, телепатически?
    Не будет WiFi, будет Ethernet или оптика или другой транспорт.
    WiFi в данном случае лишь вариант физической среды передачи данных - без нее не обойтись. Телепатически пока мы данные передавать не умеем, даже между людьми, что уж говорить про компьютеры.

    Но, обычно, сетевым приложениям вообще пофигу какая среда передачи данных. Им главное, что бы байты данных перегонялись, а как это происходит - наплевать. Приложение просто использует какой-то вариант Socket API, не заботясь о том как будут фактически передаваться данные.

    Но у вас, чувствую, проблема вовсе не в WiFi. Видимо, когда вы пытаетесь получить доступ к компу через интернет (или из другой сети), то коннект не происходит.
    Тут вы должны немного понимать как работают сети на уровне IP протокола. Вам нужно узнать: как работает маршрутизация, что такое маска, зачем она применяется, при чем тут IPv6, что такое белые адреса и серые, как с помощью NAT обходят ограничения IPv4, какие проблемы создает NAT при этом, как можно решить эти проблемы.
    А потом все это нужно натянуть на свое приложение и возможно что-то поправитьв нем, а может быть будет достаточно какой-то дополнительной настройки сетевого окружения.
  • Оригинальный Windows XP на современный компьютер?

    @res2001
    Кирилл Дмитрий, Вам нужно не страдать некрофилией, а добавить памяти в ноут.
    Но в принципе, у вас и при свободном 1 Гб софт должен работать, т.к. виртуальную память никто не отменял. Пусть и медленней, чем при большем объеме памяти.

    Если же нет возможности добавить памяти, то надо освободить дополнительную память. Подумайте над тем, какое ПО можно удалить с ноута (особенно то что работает постоянно), возможно какие-то службы можно выключить на совсем или перевести в ручной режим, запуская их скриптами или в планировщике и т.д. и т.п.
    В конце концов - держите в браузере не 50 открытых вкладок, а 5.
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    По камерам.
    Тут смысл тот же - нужно на узлах (камерах, видео сервере) добавить маршруты для сети за ВПН сервером. Но тут можно поиграть шлюзом по умолчанию (смотри вопросы ниже).
    На компах в сети за ВПН сервером, где нужен доступ к сетям камер, нужно добавить маршруты к сетям камер. Делается это аналогично посту выше, только изменить адрес сети.

    Вопросы:
    1.
    Шлюзом является видеосервер

    Видео сервер свой собственный для каждой сети камер или один видео сервер может работать с камерами из нескольких сетей?
    Если видео сервер "собственный" и имеет IP адрес в той же сети, что и камеры, то назначать его шлюзом по умолчанию в камерах не нужно. Т.к. видео сервер напрямую доступен в сети, без маршрутизации.
    Шлюз по умолчанию можно оставить пустым или использовать его в своих целях. Например, назначить шлюзом по умолчанию для камер ВПН клиента, ВПН клиент должен иметь на одном из своих локальных интерфейсов адрес из сети камер и должен быть доступен по сети.

    2.Доступ к сетям камер нужен из сети 192.168.1.0? Доступ нужен к камерам или может быть достаточно видео сервера?
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    В таблице маршрутизации сервера маршрут для сети 192.168.100.0 явно какой-то левый.
    Он у вас присутствует, если соединение не установлено? Если это wireguard влезает, то надо его убрать - 2 маршрута к одной сети - дополнительные проблемы. Маршрут должен появиться только после подключения клиента и в адресе шлюза должен быть указан ВПН IP адрес клиента.
    В клиентской таблице маршрутизации маршрут добавился правильно, но там так же присутствует и второй маршрут.
    В общем добейтесь, что бы лишних маршрутов не было. При отключенном соединении маршрутов в таблицах маршрутизации не должно быть вовсе.

    Теперь про компы в сети 192.168.1.0 - на каждый комп, которому нужен доступ к камерам и к сети за клиентом нужно добавить маршрут для сети192.168.100.0 (и для сети камер). Ручной способ - использовать команду
    route -p add 192.168.100.0 mask 255.255.255.0 <IP адрес ВПН сервера в сети 192.168.1.0>

    Команда добавит постоянный маршрут.
    Но добавлять руками на каждом компе - это не наш метод, обычно. Маршруты можно распространять с помощью опций DHCP, GPO (тут я точно не уверен, т.к. давно не использовал), какие-то другие варианты то же возможны.

    Для компов в сети за ВПН клиентом надо проделать аналогичную операцию, только команда другая:
    route -p add 192.168.1.0 mask 255.255.255.0 <IP адрес ВПН клиента в сети 192.168.100.0>


    Можете выбрать по 1 подопытному компу в каждой сети, на которых будете отрабатывать схему. Маршруты пока добавляйте руками, об вариантах автоматизации подумаете потом.

    После добавления обоих маршрутов пинги с тестовых компов друг на друга должны проходить.
    Если не проходят - скорее всего мешают фаерволы как на самих тестовых компах так и на ВПН сервере и клиенте. Для чистоты эксперимента фаерволы на время теста лучше отключить. Когда связь заработает, будете по одному включать фаервол, тестировать и если тест не проходит настраивать фаервол так, что бы трафик ходил. И так с каждым промежуточным фаерволом.
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков, В ifconfig-push третий параметр не нужен.
    Посмотрите route print на клиенте и сервере, проверьте, что соответствующие маршруты есть.

    У вас маршрут до сети 172.22.24.0 фигурирует и в push route и в iroute. Это не правильно.
    Где реально расположена эта сеть?
    Если за клиентом - оставьте iroute, если за сервером - оставьте push route.

    Теперь отвечайте на вопросы:
    1. ВПН сервер является шлюзом по умолчанию для компов в сети 192.168.1.0?
    2. ВПН клиент является шлюзом по умолчанию для компов в сети 192.168.100.0?
    3. То же самое для сети 172.22.24.0. Кто там является шлюзом по умолчанию?
    На сколько я понял в сети 172.22.24.0 камеры наблюдения. Там есть возможность настраивать шлюз по умолчанию и добавлять статические маршруты? Не приходилось иметь дело с IP камерами.
  • Почему в консоль выводится правильный результат, а в файл нет?

    @res2001
    Что конкретно у вас в результате не правильно? Хорошо бы увидеть пример того что выводится на экран и в файл.
    Пока предполагаю, что проблема в кодировке. Просто используйте правильную кодировки при просмотре файла.

    И еще ошибка: после сообщения "Файл не открыт" вы продолжаете работать с файлом так как будто он открыт.
  • Сервер-клиент openvpn win не видят за собой локальную сеть. как исправить?

    @res2001
    Слава Кривошейков,
    1. Уберите из клиентского конфига все push route
    2. Уберите из серверного конфига push route относящиеся к сетям за клиентом. Будем их прописывать в клиентском ccd в опции iroute.
    Оставьте тут только push route для сетей, находящихся за сервером. Эти маршруты будут добавлены в таблицу маршрутизации всех клиентов после подключения.
    3. Добавьте в серверный конфиг опцию "topology subnet". Про возможные варианты топологий можно почитать тут (ищите по названию опции): https://openvpn.net/community-resources/reference-...
    По умолчанию используется net30. subnet превращает вашу ВПН подсеть в одну большую подсеть, а не в кучу мелких с маской 30 подсетей.
    Всегда использую subnet.
    4. В клиентском ccd файле исправьте опцию ifconfig-push. Приведите ее в формат:
    ifconfig-push 10.8.0.8 255.255.255.0
    где 10.8.0.8 - внутренний ВПН IP адрес назначаемый клиенту при подключении, должен быть из подсети, указанной в опции server серверного конфига.
    255.255.255.0 - маска сети, та же, что и в опции server
    Если использовать топологию по умолчанию, то вместо маски надо указывать IP адрес сервера. Принцип распределения адресов между клиентами и сервером для топологии net30 описан тут: https://openvpn.net/community-resources/configurin...
    5. Добавьте в клиентский ccd опции iroute для всех сетей за данным клиентом. Эти маршруты будут прописаны в таблице маршрутизации сервера после подключения клиента.

    Рестартуйте сервер. Подключитесь клиентом.
    Проверьте пинг с сервера на клиент и обратно по внутренним ВПН адресам.
    Проверь в таблице маршрутизации сервера, что там появились маршруты, указанные в опции iroute клиентского ccd.
    Проверь в таблице маршрутизации клиента, что там появились маршруты, указанные в опции push route сервера.

    Это первый этап. Когда все проверки пройдут, перейдем к настройкам рабочих станций в сетях за клиентом и сервером.
  • В чем ошибка при установке Mingw w64 для C++?

    @res2001
    Рекомендую использовать mingw не напрямую, а установленный в msys2. В качестве дополнительных бесплатных плюшек получаете:
    1. командную строку bash со всеми линуксовыми утилитами и прочим. Утилиты можно вызывать из cmd винды то же, прописав пути в PATH.
    2. менеджер пакетов pacman. В репозиториях куча портированных под mingw сторонних библиотек.
    3. Все популярные IDE смогут находить установленный mingw, если задать переменные окружения в винде:
    MSYS_HOME=X:\msys64\usr
    MINGW_HOME=X:\msys64\mingw64

    где X:\msys64 - путь куда вы установили msys2.
    Для доступа к линуксовым утилитам из командной строки винды добавьте путь X:\msys64\usr\bin в переменную окружения PATH. Для доступа к компилятору, отладчику и т.п. добавьте в PATH X:\msys64\mingw64\bin

    После установки msys2, mingw надо установить с помощью менеджера пакетов:
    # Обновление
    pacman -Sy pacman
    pacman -Su
    pacman -Syu
    # Установка окружения для сборки
    pacman -S base-devel
    # git
    pacman -S git
    # mingw
    pacman -S mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
    # Остальное по необходимости
    # cmake 
    pacman -S mingw-w64-x86_64-cmake mingw-w64-i686-cmake
    # Qt5
    pacman -S mingw32/mingw-w64-i686-qt5 mingw64/mingw-w64-x86_64-qt5
    # QT Creator
    pacman -S mingw32/mingw-w64-i686-qt-creator mingw64/mingw-w64-x86_64-qt-creator
    # Поиск пакетов в репозитории
    pacman -Ss <reg exp for find package>

    В примерах я ставлю вариант mingw для x32 (i686) и x64 (x86_64). Если нужен только один из них убираете соответствующий пакет.

    Вместо mingw можно установить clang.
  • Как запретить пользоваталям в сети использовать VPN? как блокировать соединения?

    @res2001
    Дополню:
    - отобрать у пользователей админские права на раб. станциях
    - запрет запуска не разрешенных приложений
  • Ошибки этой быть не должно, почему возникает?

    @res2001
    Вадим Ушаков, А ларчик то просто открывался и надо было его заметить сразу :)
    В Utils.hpp в 62 строке замени слэши на обратные.
    Линукс не умеет в разные слэши, это только винда всеядная.
  • Ошибки этой быть не должно, почему возникает?

    @res2001
    Вадим Ушаков, Ну вот, справился :-)
    Только в выводе нет строки запуска компилятора. Посмотрел еще раз makefile, оказалось по умолчанию включен "тихий" режим и команды не выводятся.
    Чтоб отключить "тихий" режим попробуй запускать make так:
    make Garrys\ Mod\ 10 verbose=1
    И вывод сюда.
  • Ошибки этой быть не должно, почему возникает?

    @res2001
    Вадим Ушаков, Это не то. Это ты руками вызываешь make. А уже make вызывает компилятор.
    Нужна строка вызова именно компилятора. Она на том же экране, что и ошибка, только надо прокрутить назад (выше) и найти где вызывается gcc (или g++ ну или чем ты там собираешь).
    Освой наконец копи-паст текста из консоли.
  • Проверить первые 2 байта?

    @res2001
    Haaaaz, Ссылку открой, там пример как раз для тебя:
    std::ifstream is{"test.txt", std::ios::binary}
    В примере в конструктор передается еще std::ios::ate - это заставляет сделать переход в конец файла сразу после открытия. В примере это нужно для того, что бы узнать длину файла. Тебе это не нужно, так что ate не указывай.
  • Проверить первые 2 байта?

    @res2001
    Haaaaz,
    функционала там нет

    Есть. Надо открыть файл в двоичном режиме и прочитать 2 байта в переменную unsigned short или двухбайтовый массив.
    https://en.cppreference.com/w/cpp/io/basic_istream/read
    По ссылке выше смотрите пример.