Задать вопрос
  • Windows как маршрутизатор?

    @res2001
    The_Immortal,
    Да, Вы правы - так сервер видно: это локальный адрес Устройства B (192.168.43.1).

    Странно. Ожидал увидеть адрес сервера в той же подсети, что и клиент. По крайней мере у меня так.
    Может на роутере можно что-то докрутить, чтоб себе выдавал адрес из ВПН сети.
    Возможно из-за этого происходит то, что вы увидели в wiresharkе и о чем писал ValdikSS
    Почему то винда маршрутизирует ответ на шлюз по умолчанию, а не на шлюз из таблицы маршрутизации.

    Может для задачи все-таки нужно что-то типа виртуального маршрутизатора или не обязательно все же?

    Не требуется. Это должно работать.
    Написано
  • Почему появляются артефакты при установке windows 10?

    @res2001
    Попробовал устанавливать несколько сборок

    Сборки - зло. К тому же вы ставите ОСь для другого человека. Используйте только оригинальную версию с сайта микрософт.
    Хотя, конечно, если вы хотите, чтоб человек стал вашим постоянным клиентом, то почему бы и нет :-)
    Написано
  • Как избавить от заданных размеров количества строк и столбцов при считывании из файла?

    @res2001
    Не ясно о чем речь. Вроде вопрос короткий и простой, а вы к нему прилагаете портянку кода.
    О каких строках и столбцах идет речь?
    Стандартный вариант - писать размеры хранящейся структуры в файл перед самой структурой. Тогда при чтении сначала читаете размеры, выделяете нужное количество памяти и затем читаете в выделенную память саму структуру.
    Написано
  • Windows как маршрутизатор?

    @res2001
    The_Immortal,
    1. У VPN-сервера нет внутреннего адреса. Есть только внешний, он же и является WAN-адресом роутера.

    Это не так. Если вы его нигде не назначаете руками - это еще не говорит о том, что его нет.
    Кроме того сам по себе стек TCP/IP работает так, что ему требуется 2 адреса из одной подсети для обмена двух узлов. А ВПН сеть можно рассматривать как обычную сеть, там действуют абсолютно стандартные правила маршрутизации.
    Конкретно с SSTP у меня опыт не большой, сервер никогда не конфигурировал. Как там назначается адрес сервера не знаю. Знаю как это работает например в OpenVPN.
    Вот прям сейчас я работаю удаленно через клиента SSTP VPN в винде и в состоянии подключения на закладке Details могу увидеть адрес сервера и адрес клиента.

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

    представленного выше захвата icmp не было.

    Я уже лет 20 как разрешаю маршуртизацию в винде только добавлением в реестр параметра IPEnableRouter=1 с последующей перезагрузкой и всегда этого хватало. Причем это работает и с физическими адаптерами и с виртуальными и ВПН. Если у вас это не работало почему то, возможно это из-за каких-то ваших прошлых манипуляций.
    Написано
  • Как создать свой модуль в С++?

    @res2001
    Пример отдает каким-то питоном :-)

    После включения 2D.h у вас на прямую доступны все функции, структуры, типы, описанные в этом заголовке, их можно сразу использовать, без каких-то танцев.
    Если помимо 2D.h есть еще и 2D.cpp, то его нужно включать в сборку вместе с main.cpp.

    Либо же 2D можно собрать отдельно как статическую или динамическую библиотеку и включать в сборку библиотеку через опцию -l компилятора. В случае использования библиотеки заголовочный файл то же необходим.
    Написано
  • Windows как маршрутизатор?

    @res2001
    The_Immortal, Еще небольшой лайфхачек.
    Чтоб не добавлять статические маршруты в винде, их можно добавлять автоматически при подключении SSTP ВПН.
    Делается это в powershell:
    :: узнаем имя ВПН подключения
    Get-VpnConnection
    :: Добавляем маршруты для конкретного VPN соединения:
    Add-VpnConnectionRoute -ConnectionName <vpn name> -DestinationPrefix <networ adress/mask> -PassThru

    Маршрут указанный в Add-VpnConnectionRoute будет добавляться в таблицу маршрутизации всякий раз, когда подключаете ВПН. И удалятся из таблицы при отключении ВПН.
    Написано
  • Windows как маршрутизатор?

    @res2001
    The_Immortal, еще немного добавлю:
    включил через реестр IpEnableRouter

    Set-NetIPInterface -Forwarding Enabled

    Это одно и то же. Только после правки реестра винду надо перезагрузить, а из поша перезагружать не требуется.
    Кстати, возможно, второй вариант работает только до перезагрузки. Тут я не в курсе, надо проверять, все время делаю это через реестр.
    включил службу "Маршрутизация и удаленный доступ":

    Это лишнее. Маршуртизация работает без каких-либо дополнительных служб - это стандартный функционал TCP/IP стека даже в домашней винде.
    Написано
  • Windows как маршрутизатор?

    @res2001
    The_Immortal,
    Вот этот вопрос не очень понимаю... VPN A: 172.16.3.37 (по этому IP устройство B имеет доступ к устройству A).

    Для простоты можно рассматривать ВПН как еще один сетевой адаптер. Чтоб он нормально работал у него должен быть IP адрес. Т.к. такие ВПН адаптеры находятся на обоих узлах в сети ВПН, то и IP адреса должно быть как минимум 2 (если в ВПН сети только 2 устройства).
    У вас же везде фигурирует только 1 адрес 172.16.3.37.
    На винде посмотреть ВПН адрес можно с помощью ipconfig /all (ну или открыть окно status по ВПН подключению). Как посмотреть ВПН адрес на роутере не скажу, но там возможно адрес 172.16.3.1. Можете попинговать, например. Но лучше это где-выяснить в интерфейсе роутера или в ком.строке. В общем, на обоих узлах должен быть свой собственный ВПН адрес и эти адреса должны различаться.
    Т.к. вы на обоих узлах ВПН прописываете один и тот же адрес маршрутизатора в маршруте, то на одном из узлов этот адрес будет не верным и маршрутизация работать нормально не будет.
    Написано
  • Windows как маршрутизатор?

    @res2001
    Дополнительные вопросы:
    1. сети за А и В имеют разные адреса подсетей? Какие?
    2. из описания не ясны ВПН адреса А и В.

    На Устройстве B прописал маршрут до сети Устройства А через VPN-интерфейс:

    То же самое надо сделать и на устройстве А для сети устройства В.
    Ну и для теста отключите фаервол на винде. Если заработает, включите и если будет что-то блокировать, то надо будет вручную добавить разрешающие правила.

    Пожалуйста, подскажите, в рамках использования клиентского Windows задача не выполнима?

    Задача вполне выполнима. Неоднократно использовал это в работе начиная с Windows 2000.
    Написано
  • Что подразумевается под поиском двух линий при создании контейнера?

    @res2001
    По рисунку все понятно.
    В примере найдены 2 линии 2 и 9. Они образуют "двумерную" емкость в которую может поместиться 49 чего-то воды.
    49 = 7*7, где
    первая 7 - это расстояние между 9 и 2 линией по Х, т.е. 9-2=7
    вторая 7 - это длина наименьшей из двух выбранных линий (7 и 8), т.к. именно это значение ограничивает объем получаемой емкости.
    Написано
  • Какие книги подойдут для изучения c++?

    @res2001
    По логике, пожалуй, стоит :-)
    Для изучения С++ подойдет любая более-менее современная толстая книжка по С++.
    Например Прата возьмите.
    Написано
  • Почему неправильно считает Коэффициенты регрессии?

    @res2001
    Борис Стасев, Добавьте в код дополнительный отладочный вывод промежуточных результатов и смотрите на каком этапе выводимые данные начинают не сходится с вручную рассчитанным результатом.
    Для простоты можно сократить входной файл и т.п.
    Можно разбить задачу на части и отлаживать каждую часть, как отдельную задачу, добиваясь правильного результата для каждой отдельной части. И т.д и т.п.

    Отладочный вывод потом удалите, когда все отладите.

    Вместо отладочного вывода можно использовать отладчик, но для вашей задачи, пожалуй, проще будет использовать именно вывод промежуточных результатов.

    Чтоб избавиться от вероятных ошибок связанных с использованием типа float, перейдите на тип double. У float очень низкая точность, всего 6-7 значащих десятичных цифр. Из-за этого при интенсивных расчетах с float могут быть не корректные результаты.
    Отладитесь с double, перейдете обратно на float (если float вам принципиален) и посмотрите, как изменится результат. С некоторыми ошибками точности можно попробовать побороться, но далеко не со всеми. Это специфика типов с плавающей точкой. У double то же есть свои ограничения по точности (15-17 значащих десятичных цифр), но они гораздо больше, чем у float и обычно точности double хватает.
    Написано
  • Какой структурой можно повесить lock на диапазон?

    @res2001
    Как вариант - блокировать каждый пакет из диапазона
    Написано
  • Как вывести изображение с прозрачным фоном WinApi c++?

    @res2001
    Точного ответа не знаю. Но могу предположить, что голая винда, возможно, умеет только в BMP. Поддержка разных форматов изображений - это не задача ОС. Так же как и звука/видео и т.п.
    Все остальное может быть использовано через дополнительные преобразования.
    Ищите подходящие библиотеки для работы с изображениями. Можно начать с libpng. Можно поискать что-то более универсальное с поддержкой разных форматов, если вам это может понадобится в дальнейшем.
    Написано
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    реально?

    strtol и atoi делают одно и то же.
    Только atoi старый вариант с лохматых времен и она ничего не знает про системы счисления - для нее входной параметр всегда в десятичной системе.
    strtol - умеет в системы счисления, и не только в стандартные, вплоть до 36. Видел один раз использование 36ричной системы счисления в жизни :) позволяет сильно ужимать числа по сравнению с десятичной в текстовом представлении.
    Написано
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    с делал вот так

    Блин. Дак у вас на входе десятичные цифры, записанные в строке. Вам достаточно было в первоначальном варианте сделать strtol(asciiHex, NULL, 0);
    Я думал, что на входе шестнадцатиричные, т.к. и вы использовали систему счисления 16 в strtol. Да и вопрос задан соответствующим образом.
    Написано
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    А ещё один момент, когда я вывожу на экран в формате допусти "%X" он же не меняет сам себя, а только нам отображать да?

    Если выводите через printf, то исходная переменная (decValue) никак не меняется, шестнацатиричные цифры будут только на экране.
    Если используете snprintf для формирования буфера, то после выполнения snprintf в буфере будет содержаться строка с шестнацатиричными цифрами. Ее потом можно вывести просто как строку printf("%s\n", asciiHex);
    Написано
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    не переводить из HEX ASCII в DEC, а потом обратно, а сразу на его уровне прибавить

    Можно. Но, пожалуй, с конвертацией это будет гораздо проще сделать.

    Если отладчик не запускается, то используйте отладочный вывод я же уже писал. Это такой ручной способ отладки, его не всегда можно применять (как и сам отладчик), но в вашем случае вполне можно.

    Вот набросал ваш пример в готболте: https://gcc.godbolt.org/z/qKncjfPac
    Работает.
    Написано
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400,
    в Serial2.available() я проверяю всё что мне приходит

    Ок
    вчера работала ,сегодня нет

    Попробуйте удалить все артефакты сборки, т.е. объектные файлы, исполняемый файл (прошивку или что там у вас в ардуинке) и т.п. (в IDE это обычно можно сделать через меню, что-нибудь типа Clear Project) и пересобрать весь проект с нуля.
    Ваш код пробую пишет 2А в первую ячейку, голова кругом

    Добавьте отладочного вывода на промежуточных этапах, чтоб проверить состояния промежуточных переменных и т.п. Или используйте для этого отладчик.
    Написано
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Danilka2400, После read явно не хватает проверок полученных данных на корректность по требованиям протокола. Вдруг вам там пургу гонят или например вы прочитали пакет не до конца и т.п. Прочитать только часть пакета из последовательного порта (да и не только) можно легко, это вообще обычное поведение всех коммуникационных вызовов.

    Запустите под отладчиком да посмотрите по шагам где тут косяк.
    Или просто выводите в лог (на экран или куда можете) промежуточные значения.
    При входных данных "95" в asciiHex должно содержаться {'9', '5', 0}

    В целом ваш код выглядит правильно, но много лишних телодвижений на мой взгляд. Возможно вам это для чего-то надо, не знаю.
    Правда осталось не ясно как определен kolchislo. И вы продолжаете использовать VLA в buffff. VLA - это зло. Подумайте как уйти от этого.
    Написано