Пример реализации SFML Network

SFML и C++ Уроки \ Разработка игр Форумы SFML Network Пример реализации SFML Network

В этой теме 11 ответов, 6 участников, последнее обновление  KindRedSand 3 мес. назад.

Просмотр 12 сообщений - с 1 по 12 (из 12 всего)
  • Автор
    Сообщения
  • #416
    +8
    Fedor
    Fedor
    Участник
    Сообщений:18

    Зарегистрирован:
    16.04.2015

    Репутация:20

    Здравствуйте, хочу предложить один из вариантов как реализовать библиотеку Network, для этого необходимо её подключить:

    Далее задумка очень проста: есть 2 компьютера, один “Сервер-компьютер” второй “клиент-компьютер”. Первый создает по протоколу TCP подключение к себе, второй подключается к нему и производит какие то действия, в нашем случае двигает шарик по экрану.

    Пример программы:

    Если нет второго компьютера вы можете создать и на одном открыв приложение 2 раза.

    Для подключения в интернете “Сервер-компьютер” должен открыть порт  2000 и в настройках роутера: NAT>DZM host> Использовать> Выбрать сетевой адрес хоста.

    P.S. IDE Eclipse, компилятор MinGW

    P.S.S если возникли трудности с компиляцией предоставляю готовую программу.

    #421
    +3
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:585

    Зарегистрирован:
    04.01.2015

    Репутация:104

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

    Можно пользоваться ссылками на облако, в том числе можно использовать для этого наше облако на яндекс диске из sfml_cloud
    p.s после ценных постов так и хочется быстрее запилить на форум систему рейтинга:-)

    #696
    +1
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Крашится то клиент то вместе с сервером на моменте выбора режима клиент.

    #697
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    точка останова здесь cin >> ip;

     

    Необработанное исключение по адресу 0x62B5F958 (msvcp120.dll) в SFML Network.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCDCD.

    #698
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Это у меня проблемы с подключением библиотеки sfml. Очень странные проблемы, не хочет не в какую подключаться . Видимо это новые приколы от Visual Studio 15 RC , а так все работает, + автору ) (компильнул через Visual Studio 13 )

    #699
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Я тут нафлудил )) за ранее извиняюсь. Но по чему такая задержка ?

    #700
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:585

    Зарегистрирован:
    04.01.2015

    Репутация:104

    задержка ответа? 10 сек должна быть

    #702
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    В скорости передачи и обработки пакетов. Я убрал 10 миллисекунд из кода, но по ощущениям как будто сервер в китае а я где нибудь в польше )

    #703
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:585

    Зарегистрирован:
    04.01.2015

    Репутация:104

    Я думал ты про задержку отправки сообщений на форуме)

    #845
    JonAdmin
    JonAdmin
    Участник
    Сообщений:11

    Зарегистрирован:
    23.05.2015

    Репутация:9

    Ухты, круто! Но к этому я вернусь позже

    #4843

    idris070
    Участник
    Сообщений:1

    Зарегистрирован:
    16.07.2017

    Репутация:0

    Я заметил проблему о задержке сервера, я ее решил таким образом

    if(mode == ‘s’){
    socket.receive(packet); //Команда которая ожидает данных в виде пакета от клиентской части
    if(packet >> x >> y){ //вытаскиваем значение из пакета в переменную x и у (действие уже происходит)
    cout << x << “:” << y<< endl; //..и если все прошло успешно то выводим её координаты
    }
    }

    if(mode == ‘r’){
    if (Keyboard::isKeyPressed(Keyboard::Right)) { //первая координата Х отрицательна =>идём влево
    x ++;
    }
    if (Keyboard::isKeyPressed(Keyboard::Left)) { //первая координата Х отрицательна =>идём влево
    x –;
    }

    if (Keyboard::isKeyPressed(Keyboard::Down)) { //первая координата Х отрицательна =>идём влево
    y ++;
    }
    if (Keyboard::isKeyPressed(Keyboard::Up)) { //первая координата Х отрицательна =>идём влево
    y –;
    }

    packet << x << y; //Пакуем значения координат в Пакет
    socket.send(packet); //Отправка данных
    packet.clear(); //Чистим пакет
    }
    window.clear();
    shape.setPosition(x, y); //выставляем шар на координаты
    window.draw(shape); //отрисовываем шар
    window.display();
    if(mode == ‘r’)
    sleep(sf::milliseconds(10));//Задержка
    }//END

    То есть я заметил сервер все время начал позже показывать действия, как я понял сервер не успевал обрабатывать информацию, и начал задерживаться ( он просто не успевает так скажем за клиентом)

    Поэтому я сделал так, у клиента будет задержка sleep(10)  а сервер не будет принимать задежку он постоянно будет слушать!

    То есть когда сервер с параметром sleep(10) по общему результату он должен повторить работу клиента, но она накапливается и  он дает задержку :)

    Извиняюсь пояснение наверное не очень понятное, просто хотел объяснить примерно с чем связана задержка!

    #4850

    KindRedSand
    Участник
    Сообщений:71

    Зарегистрирован:
    05.04.2017

    Репутация:28

    idris070, Некропостинг. А вобще эта проблема отпадает если правильно переписать весь код (Буржуй чёт нахимичил лишнего в коде на видео а остальные неглядя код скатали).

Просмотр 12 сообщений - с 1 по 12 (из 12 всего)

Для ответа в этой теме необходимо авторизоваться.