• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Biblioteka SFML - Problem z socketem UDP

0 głosów
155 wizyt
pytanie zadane 27 maja 2019 w C i C++ przez Gtru Nowicjusz (150 p.)
edycja 27 maja 2019 przez Gtru

Witam

Od niedawna korzystam z biblioteki Network od SFML.

Mój problem w moim obecnym programie jest taki, że strona serwera nie aktualizuje 

nowych nadchodzących pakietów ze strony klienta tylko ten pierwszy,  pomimo zastosowania pętli.

Obrazek: https://ibb.co/LrXHQvt

/*
    <NETWORK APPLICATION>
*/

#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>

using namespace std;

int main()
{
        srand(time(NULL));
    string connectionType;
    cout << "Choose the connection type: <s> to the server, <c> to the client" << endl;
    cin >> connectionType;

    //<--TIMER-->//
    sf::Time appTimer;
    sf::Clock appClock;

    //<--SOCKETS-->//
    sf::UdpSocket appSocket;
    sf::IpAddress recipientIpAddress("192.168.0.100");
    sf::IpAddress senderIpAddress("192.168.0.100");
    sf::Packet socketPacket;
    sf::Uint16 x = 2;
    unsigned short socketPort = 5325565335885;

    //<--SERWER-->//
    if(connectionType == "s")
        {
        appSocket.bind(socketPort);
        while(true)
            {
            appTimer = appClock.getElapsedTime();
            if(appTimer.asSeconds() > 1.f)
                {
                    appClock.restart();
                appSocket.receive(socketPacket, senderIpAddress, socketPort);
                socketPacket >> x;
                cout << "SERWER: " << x << endl;
                }
            }
        }

    //<--CLIENT-->//
    else if(connectionType == "c")
        {
        while(true)
            {
            appTimer = appClock.getElapsedTime();
            if(appTimer.asSeconds() > 1.f)
                {
                    appClock.restart();
                x = rand()% 256;
                cout << "CLIENT: " << x << endl;
                socketPacket << x;
                appSocket.send(socketPacket, senderIpAddress, socketPort);
                }
            }
        }

    //<--ERROR-->//
    else
        {
        cout << "You've chosen the wrong menu option!";
        }

 return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 27 maja 2019 przez vector Dyskutant (9,200 p.)
wybrane 28 maja 2019 przez Gtru
 
Najlepsza
Metoda send klasy UdpSocket nie czyści zawartości pakietu kiedy go wysyła. Zmienna socketPacket w drugiej iteracji pętli while będzie trzymała dwie liczby, a serwer wypisuje tylko pierwszą.
komentarz 28 maja 2019 przez Gtru Nowicjusz (150 p.)
Dzięki, teraz po dodaniu funkcji "clear" wszystko działa.

Podobne pytania

0 głosów
1 odpowiedź 246 wizyt
pytanie zadane 13 października 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)
0 głosów
1 odpowiedź 145 wizyt
pytanie zadane 19 maja 2018 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 236 wizyt
pytanie zadane 19 maja 2018 w C i C++ przez niezalogowany

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...