Задать вопрос
  • Почему не работает TCP чат?

    @res2001
    Андрей, Отлично! Верной дорогой идете.
    Вам нужно заново осмыслить проблему. Понять как сейчас все работает, и как должно работать у вас.
    В целом, в предыдущем ответе я накидал картинку. Вам нужно во всем этом разобраться.
  • Почему не работает TCP чат?

    @res2001
    Андрей, И не должно работать.
    У вас неинициализированный буфер (buffer), что вы отправляете в нем клиенту? - Мусор. И на что надеетесь?

    Весь обмен с клиентами происходит в отдельном потоке. На каждого клиента свой поток. Вам нужно вносить новый функционал в функцию serve_client() - она отвечает в сервере за обмен со своим килентом.
    Учитывая, что сервер многопоточный и каждый поток работает с одним своим клиентом, то для обмена информацией между разными клиентами вам нужно наладить какой-либо вариант многопоточного взаимодействия.
    Так что добавлением 3 строк в код вам не переделать эхо сервер в чат.
    Сейчас в сервере каждый поток - независим, он работает только со своим клиентом, на других ему наплевать. Никакого многопоточного взаимодействия тут не реализовано (т.к. не нужно). А вам это нужно.

    Я бы на самом деле реализовал это по другому - с помощью неблокирующих сокетов в одном потоке.

    Кстати. Реализация функций в вашем шаблоне очень похожа по стилю с примерами из книги Стивенса "Unix. Разработка сетевых приложений". Можете поискать книгу в электронном виде, примеры из нее то же есть на официальном сайте автора. Книга хоть и старая, но вполне актуальна. Рекомендую для освоения сетевого программирования.
  • Как определить переменную среды Environment?

    @res2001
    Круто! Не знал, что в винде появилась такая команда. Интересно, с какой версии винды она появилась. Вы не в курсе?
  • Почему не работает TCP чат?

    @res2001
    Изменений 0

    Было бы 0, наверное работало бы. Может код изначально не рабочий?
    Что конкретно не работает? Ошибки при сборке? Падает? Что на экран выдает? Давайте больше деталей.
    Портянка большая, не многие захотят ее читать, и еще меньше тестировать у себя.
  • Как реализовать атамарность в MongoDb?

    @res2001
    HellishCode, Ну добавляйте в отдельную коллекцию флаг типа я отправляю с временной меткой и уникальным номером экземпляра. Сделайте индекс по timestamp.
    1.Перед добавлением читайте флаги с timestamp позже на 5 мин текущего времени. Если возврат не пустой - отправлять нельзя.
    2.Если возврат пустой - добавляйте свой флаг
    3.Повторно читайте флаги с timestamp позже на 5 мин текущего времени, если вернулся только ваш 1 флаг, значит можно отправлять. Если флагов больше 1, значит кто-то уже вклинился и отправляет. Этому экземпляру отправлять нельзя.

    В коллекцию только добавляете, ничего не удаляете.
    Можно глобально удалять по расписанию. Удалять записи позже на 5 мин текущего времени.

    Как-то так.
  • Как реализовать атамарность в MongoDb?

    @res2001
    HellishCode, У вас действительно несколько инстансов?
    Ну так может надо какому-нибудь инстансу сказать, что ты будешь отправлять, а остальные пусть не лезут с отправкой.
    Речь идет об электронной почте? Сервер на линуксе? Какой MTA используется? Возможно в МТА есть настройки, которыми можно это отрегулировать (отправлять по 1 письму за раз и период отправлений каждые 5 мин).
  • Как реализовать атамарность в MongoDb?

    @res2001
    HellishCode, Вам нужно что бы только 1 экземпляр приложения попал в базу? Что с остальными? Давайте больше подробностей.
  • Как реализовать атамарность в MongoDb?

    @res2001
    HellishCode, В документе пишут, что любая операция записи 1 документа атомарна. Если вы одним вызовом пишете сразу несколько документов, то атомарными будут операции записи каждого отдельного документа, но не все вместе. И это не зависит от того какую операцию записи вы используете.
    В монге нет транзакций.

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

    @res2001
    deuxexdeex, семантика перемещения, лямбды, ООП.
    Из std - структуры данных, алгоритмы, atomic, threads
  • Установка stunnel какой порт использовать?

    @res2001
    dminster94, На счет связки openvpn + stunnel.
    Вы должны настроить openvpn на сервере слушать только адрес 127.0.0.1 на каком-либо TCP порту.
    На openvpn клиенте сервером указываете так же адрес 127.0.0.1 с таким же портом на сервере.
    В этой связке stunnel будет осуществлять внешнее соединение и передавать полученные данные openvpn. Поэтому все внешние адреса прописываются в конфиге stunnel на обеих сторонах.
    Схема примерно такая:
    OpenVPN client (proto tcp4; remote 127.0.0.1 12345)
    |
    stunnel client (client = yes; accept = 127.0.0.1:12345; connect = 204.48.XX.YY:443)
    |
    stunnel server (client = no; accept = 204.48.XX.YY:443; connect = 127.0.0.1:12345)
    |
    openvpn server (proto tcp4; port 12345; local 127.0.0.1)
  • Установка stunnel какой порт использовать?

    @res2001
    dminster94, stunnel.service - это файл конфигурации службы для systemd.
    Что выдает команда: systemctl status stunnel?

    В убунту эти файлы лежат кажется тут: /lib/systemd/system.
    Проверьте там наличие этого файла. Если файл есть, то может быть служба не включена. Включить ее так:
    sudo systemctl enable stunnel
    Если файл есть, а все предыдущие команды выдают ошибки, то можно перечитать конфиги:
    sudo systemctl daemon-reload
  • Скрипт копирования папок?

    @res2001
    MaxKozlov,
    только set

    Спасибо, исправил!
  • При изучении фабричного метода, увидел странную структуру, что это?

    @res2001
    Некит Медведев, Может и C#, я его не знаю. Синтаксис примера плюсовый. Но возможно и шарповый :-) они местами похожи.
  • При изучении фабричного метода, увидел странную структуру, что это?

    @res2001
    Евгений Шатунов, Вот чорт, давно не брал в руки плюсы. Спасибо за подсказку.
    Уточняю для классов объявленных как class наследование по умолчанию приватное, для классов объявленных как struct - публичное.
    Некит Медведев, отметь ответ Александр Ананьев решением. И читай первоисточники.
  • Почему не сканирует диспетчер задач?

    @res2001
    Ошибка то какая?

    Вы не обрабатываете ни одного возврата из системных функций, поэтому не знаете какая и где ошибка.
    После каждого вызова системной функции проверяйте возвращаемое значение и если ошибка - выводите ее. Тогда у вас будет информация к размышлению, а сейчас ничего нет.
  • Установка stunnel какой порт использовать?

    @res2001
    dminster94, Давайте уже больше конкретики.
    Выложите конфиги openvpn клиента и сервера, выложите оба конфига stunnel. Реальные адреса можете заменить чем-нибудь. Напишите ошибку при запуске stunnel. На какой стороне происходит ошибка (или на обеих)? Проверьте с помощью netstat слушает ли openvpn сервер локальный адрес (127.0.0.1). И напишите какая у вас ОС на обеих сторонах.
  • Почему выдает ошибку C2664?

    @res2001
    Lnkova, Ну потому что все ваши строковые константы ("dir", "cd", ...) типа char*,а используя wstring, вы должны использовать в константах широкие символы то же.
    На сколько помню, в MSVS работал макрос TEXT("dir"), который преобразовывал параметр либо в char* либо в wchar* в зависимости от настроек проекта (если используем Unicode, то результат будет wchar*, если нет, то char*. Используйте этот макрос в константах.
    И не помешало бы разобраться в отличия char и wchar_t, как эти типы связаны с настройками проекта и с WinAPI.
  • Что делает эта часть кода (выделено кругом)?

    @res2001
    Fango, Нет. Но если будете тут вопросы задавать, то могу отвечать, если время будет.