matematykaszkolna.pl
aa Hugo: SFML socket selector c++ Czy ktoś siedzi w tym? Chodzi mi o napisane prostego czatu, działa mi bez socket selector, jednak chciałbym na bieżąco odświeżac czat. Gubie się w kodzie. Ktoś mógłby mi pomóc?emotka http://pastebin.com/XhZzHA2P <− kod działający bez socket selector //surowy kod z socket selector sf::TcpListener server; // gniazdo nasłuchujące vector < sf::TcpSocket *> clients; // tutaj przechowujemy klientów sf::SocketSelector sel; // selektor sel.add( server ); // dodajemy gniazdo nasłuchujące //... while( true ) // pętla główna serwera { if( sel.wait( sf::seconds( 2 ) ) // jeśli metoda wait() zwróci true, to znaczy, że któreś z dodanych gniazd jest gotowe do odbioru // jako argument podajemy czas, przez który ma czekać na dane { if( sel.isReady( server ) ) // metoda isReady() sprawdza, czy dane gniazdo ma dane do odebrania // jeśli do motedy isReady() przekażemy gniazdo nasłuchujące, true oznacza, że ktoś chce się do niego podłaczyć { TcpSocket * tmp = new sf::TcpSocket; server.accept( * tmp ); // skoro ktoś chce się do nas połączyć, to go akceptujemy clients.pushback( tmp ); // i dodajemy go do listy sel.add( * tmp ); // oraz do selektora, żeby można było od niego odbierać dane // nie zapomnij, by usunąć(za pomocą delete) gniazdo, kiedy się rozłączy } // pętla przechodząca po kontenerze gniazd (zależy od typu kontenera) for( int i = 0; i < clients.size(); i++ ) // u nas to jest for i indeks i { if( sel.isReady( * clients[ i ] ) ) // *clients[i] coś nam wysłał { const int datasize = 100; // rozmiar danych do odebrania char data[ datasize ]; // dane unsigned int received; // odebrane clients[ i ]−>receive( data, datasize, received ); cout << "Odebrano " << received << " bajtów od " << clients[ i ]−>getRemoteAddress() << endl; // tutaj robimy coś z odebranymi dany //... } } //... // reszta kodu serwera }
10 kwi 19:37