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

[SFML 2.1] Serwer akceptuje tylko jedno połączenie

Ostatnio zmodyfikowano 2014-01-28 19:01
Autor Wiadomość
CodeMeister
Temat założony przez niniejszego użytkownika
[SFML 2.1] Serwer akceptuje tylko jedno połączenie
» 2014-01-27 22:17:15
Witam mam problem jak w temacie, nie wiem co może być tego przyczyną
kod:

C/C++
std::vector < sf::TcpSocket > clients;

sf::TcpListener listenerSocket;
if( listenerSocket.listen( port ) != sf::Socket::Done )
{
    std::cout << " [!] Wrong port\n";
    return;
}

std::cout << " [+] Waiting for connections...";


sf::SocketSelector selector;
selector.add( listenerSocket );

while( true && configured )
{
    if( selector.wait( sf::seconds( 0.1 ) ) )
    {
        if( selector.isReady( listenerSocket ) ) // Sprawdz listener
        {
            // Nowe polaczenie
            sf::TcpSocket * newClient = new sf::TcpSocket;
            if( listenerSocket.accept( * newClient ) == sf::Socket::Done )
            {
                clients.push_back( newClient );
                selector.add( * newClient );
               
                std::cout << "\n [+] Connected new client - " << newClient->getRemoteAddress() << std::endl;
            }
            else // Blad w nowym polaczeniu
            {
                delete newClient;
                std::cout << " [!] Error with new connection\n";
            }
        }
        else // Dane od juz polaczonych klientow
        {
            for( size_t index = 0; index < clients.size(); index++ )
            {
                sf::TcpSocket & client = *( clients[ index ] );
                if( selector.isReady( client ) )
                {
                    // Odebranie danych od klienta
                    sf::Packet packet;
                    if( client.receive( packet ) == sf::Socket::Done )
                    {
                        std::cout << " [>] Data send by " << client.getRemoteAddress() << "\n";
                        std::string request;
                        packet >> request;
                       
                        // Rozeslij do wszystkich innych
                        for( int i = 0; i > clients.size(); i++ )
                        {
                            if( i != index ) // Do wszystkich poza tym ktory wyslal pakiet
                                 clients[ i ]->send( packet );
                           
                        }
                    }
                }
            }
        }
    }

nie łączy się z drugim klientem ale wyświetla że został połączony po tym jak klient który był wcześniej połączony się rozłączył.

Mam nadzieję że ktoś zrozumie to zdanie :D
i pomoże, proszę o szybką pomoc bo pilnie potrzebuję mieć działający serwer na jutro ;)
P-103378
RazzorFlame
» 2014-01-28 19:01:49
for( int i = 0; i > clients.size(); i++ )
Coś mi się wydaje że warunek troche tutaj nie pasuje ;)
P-103449
« 1 »
  Strona 1 z 1