Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] 1.6 Znaczący spadek fps podczas gdy client jest połączony z serwerem.

Ostatnio zmodyfikowano 2014-01-11 18:09
Autor Wiadomość
DanielSC
Temat założony przez niniejszego użytkownika
[SFML] 1.6 Znaczący spadek fps podczas gdy client jest połączony z serwerem.
» 2014-01-11 10:06:59
Witam!
Napisałem prostą grę tzn. mapa i poruszająca się po niej postać. Do tej aplikacji stworzyłem serwer multiplayer.
Serwer działa tak ,że dostaje od clienta parametry x,y,nick a następne rozsyła je do innych clientow.
Wszystko działa poprawnie jeśli włączę dwa clienty na tym samym komputerze na jakim jest serwer,natomiast jeśli serwer będzie
stał dajmy to na moim kompie a client połączy się z innego komputera to u tego clienta jest znaczący spadek fps (przy pomocy programu do nagrywania z 500fps do 13).
Jeśli wiecie co może być nie tak ,to proszę o odpowiedz .Za każdą z góry dziękuje.


Aplikacja działa z normalnym fps gdy serwer jest wyłączony.


serwer:
C/C++
#include <SFML/Network.hpp>
#include <iostream>
#include <conio.h>
#include <sstream>
#include <String>
using namespace std;
using namespace sf;
int main()
{
   
   
    SelectorTCP Selector;
   
    sf::IPAddress Sender;
    SocketTCP Klient, sluchacz;
    unsigned short Port = 4567;
    bool polaczono = false;
    char buffer[ 7 ];
    std::size_t Received;
   
    Packet dane;
    Packet dane_do_klienta;
    string x_gracza[ 2 ], y_gracza[ 2 ], kat_gracza[ 2 ];
   
    string x, y, rotate, nick;
    string zapisz_nick[ 2 ] = { "0", "0" };
   
    //////
    if( !sluchacz.Listen( Port ) )
    {
        std::cout << "Blad" << std::endl;
    }
    Selector.Add( sluchacz );
   
   
    while( true )
    {
       
       
        unsigned int NbSockets = Selector.Wait();
        for( unsigned int i = 0; i < NbSockets; i++ )
        {
            Klient = Selector.GetSocketReady( i );
        }
        if( Klient == sluchacz )
        {
            sluchacz.Accept( Klient, & Sender );
            cout << "Client connected " << endl;
           
           
            Selector.Add( Klient );
        }
        else
        {
           
           
            if( Klient.Receive( dane ) == Socket::Done )
            {
               
               
                dane >> x >> y >> rotate >> nick;
                for( int i = 0; i < 2; i++ )
                {
                    if( nick == zapisz_nick[ i ] )
                    {
                        break;
                    } else if( nick != zapisz_nick[ i ] && zapisz_nick[ i ] == "0" )
                    {
                       
                        zapisz_nick[ i ] = nick;
                        x_gracza[ i ] = x;
                        y_gracza[ i ] = y;
                        kat_gracza[ i ] = rotate;
                        break;
                       
                    }
                   
                }
               
               
                for( int i = 0; i < 2; i++ )
                {
                    if( zapisz_nick[ i ] == nick )
                    {
                        zapisz_nick[ i ] = nick;
                        x_gracza[ i ] = x;
                        y_gracza[ i ] = y;
                        kat_gracza[ i ] = rotate;
                       
                    }
                    if( nick != zapisz_nick[ i ] )
                    {
                       
                        dane_do_klienta << x_gracza[ i ] << y_gracza[ i ] << kat_gracza[ i ] << zapisz_nick[ i ];
                        if( Klient.Send( dane_do_klienta ) == Socket::Done )
                        {
                           
                        }
                        dane_do_klienta.Clear();
                       
                    }
                   
                }
               
            }
            else
            {
                Selector.Remove( Klient );
               
            }
           
        }
       
       
    }
   
    system( "PAUSE" );
    return 0;
}

//...
client:
C/C++
string nick, ip;
bool polaczono = false;
sf::IPAddress Adres = sf::IPAddress::GetPublicAddress();
sf::SocketTCP Klient, Serwer;
unsigned short Port = 4567;
cout << "Podaj nick : ";
cin >> nick;
cout << endl;
cout << "Podaj ip serwera :";
cin >> ip;

do
{
    cout << "IP :" << Adres << endl;
    if( Klient.Connect( Port, ip ) == Socket::Done )
    {
        polaczono = true;
       
       
    }
    else
    {
        //
    }
} while( polaczono == false );
//petla glowna programu
dane << konwersja_double_string( x_gracza ) << konwersja_double_string( y_gracza ) << konwersja_double_string( kat ) << nick; //min. funkcja konwertujaca typ double na strng
if( Klient.Send( dane ) != Socket::NotReady )
{
   
   
}
dane.Clear();


if( Klient.Receive( dane_od_serwera ) != Socket::NotReady )
{
    dane_od_serwera >> x_gracz2 >> y_gracz2 >> kat_gracz2;
   
   
   
}
postac3.SetRotation( konwersja_char_string( kat_gracz2 ) ); //--funkcja konwertujaca string na double
postac3.SetPosition( konwersja_char_string( x_gracz2 ) + przesun_mape_x * 64, konwersja_char_double( y_gracz2 ) + przesun_mape_y * 64 ); //-
P-101821
MrPoxipol
» 2014-01-11 10:14:10
Kod.
P-101822
DanielSC
Temat założony przez niniejszego użytkownika
» 2014-01-11 16:33:53
.Kod dołączony.
P-101855
RazzorFlame
» 2014-01-11 16:37:52
Wyszukiwarka na forum jest, wiesz? Z podobnym problemem spotkałem się ja i dobrze pamiętam wypowiedź Ison'a (który z resztą wiele razy mi już pomógł). Jego wypowiedź brzmiała:
jak pchasz te pakiety co klatkę to się nie dziw, że nie nadążasz z ich odbieraniem

Edit:
Link do tematu: http://cpp0x.pl/forum/temat/​?id=11921
P-101856
DanielSC
Temat założony przez niniejszego użytkownika
» 2014-01-11 18:09:02
Dzięki RazzorFlame.
P-101871
« 1 »
  Strona 1 z 1