SFML и C++ Уроки \ Разработка игр › Форумы › SFML Network › UDP проблеми › Ответ в теме: UDP проблеми
Такс такс такс network Наконецта!
Во первых бросается во внимание метод подключения Udp, для него ненужно устанавливать соединение, он закидывает все данные на прямую(ваш метод рабочий) только убедитесь в правильности ip сервера!
Во вторых пакует данные строчка 35, а не 36. 36 лишь выводит значения x1 и y1 в консоль.
В третьих необходимо “вычищать предыдущие значения пакета” для пакета есть метод clear().
Скорее всего вы хотели получить что то подобное:
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
#include <SFML/Graphics.hpp> #include <SFML/Network.hpp> #include <iostream> #include <string> using namespace std; using namespace sf; int main() { setlocale(LC_ALL, ""); // Поддержка кириллицы в консоли Windows IpAddress ip,ipserver = "192.168.0.101"; //Локальный ip Адресс sf::UdpSocket socket;//программный интерфейс для обеспечения обмена данными между процессами Packet packet; //Для осуществления пакетной передачи дынных unsigned short port = 2000; char type; string text = "Connect to: "; int x1=20,y1=30; //***********Подключение***************// cout << "Введите тип подключения: c -клиент, s -сервер :"; cin >> type; if(type=='c'){ cout << text << ipserver << endl; if (socket.bind(2000) != sf::Socket::Done){ cout << "errors"<<endl; system("pause"); exit(1); }else{ cout <<"1.ok"<<endl; }//Прослушивает порт //**********Отрисовка Формы***********************// RenderWindow window(sf::VideoMode(640, 420), "Network");//Создаем размер Главного окна //*******Элементы********************// CircleShape shape1(10); //создаем шар с радиусом 50 shape1.setFillColor(sf::Color::Green); while(window.isOpen()){ sf::Event event; while(window.pollEvent(event)){if(event.type == sf::Event::Closed){ window.close(); } } if (Keyboard::isKeyPressed(Keyboard::D)) x1 ++; if (Keyboard::isKeyPressed(Keyboard::A)) x1 --; if (Keyboard::isKeyPressed(Keyboard::S)) y1 ++; if (Keyboard::isKeyPressed(Keyboard::W)) y1 --; packet<<x1<<y1; cout<<x1<<"|"<<y1 << endl; //Пакуем значения координат в Пакет if (socket.send(packet, ipserver, 2001)!= sf::Socket::Done) {cout<<"send.errors"<<endl;}//Отправляет на сервер packet.clear(); if (socket.receive(packet, ipserver, port)!= sf::Socket::Done) {cout <<"receive.errors"<<endl;}//Получает с сервера if (packet >> x1 >> y1){ shape1.setPosition(x1, y1); cout<<x1<<"|"<<y1<<endl; packet.clear(); }//Распаковывает window.clear(); window.draw(shape1); //Отрисовываем шар window.display(); sleep(sf::milliseconds(10));//Задержка } } if(type=='s'){ if (socket.bind(2001) != sf::Socket::Done){cout << "errors"<<endl;system("pause");exit(1);}else{cout <<"1.ok"<<endl;}//Прослушивает порт RenderWindow window(sf::VideoMode(100, 100), "Network");//Создаем размер Главного окна while(window.isOpen()){ sf::Event event; while(window.pollEvent(event)){ if(event.type == sf::Event::Closed){ window.close(); } } if (socket.receive(packet, ip, port)!= sf::Socket::Done) { cout <<"receive.errors"<<endl; } else {//Принимает пакет int x2,y2; packet>>x2>>y2;//Распаковывает cout<<x2<<"|"<<y2<<endl; packet<<x2<<y2;//Пакует if (socket.send(packet, ip, 2000)!= sf::Socket::Done) {cout<<"send.errors"<<endl;}//Отправляет назад packet.clear(); } sleep(milliseconds(10));//Задержка } } return 0; } |
Если помогло репу+ а то админ по доганяет по рейтингу 😀