Przyuczam się w C++/SFML i nie mogę ogarnąć prostch rzeczy.
Mogę podłączyć tylko jednego klienta (łączę się za pomocą wielu instancji telnet), nawet jak zakończę połączenie, nic się nie dzieje.
Proszę o nakierownie na dobrą drogę.
Przykładowy kod:
#include <iostream>
#include <SFML/Network.hpp>
// maksymalna ilość połączeń
int conn_limit = 4;
// lista podłączonych klientów
std::vector<sf::TcpSocket> client( conn_limit );
// wątek obsługujący klienta
void Client( int conn_id ) {
while( true ) {
// połączenie zostało przerwane?
if( client[ conn_id ].getRemoteAddress() == sf::IpAddress::None ) {
// wyświetl komunikat
std::cout << "Klient o identyfikatorze " << conn_id << " przerwał połączenie." << std::endl;
// zakończ wątek
break;
}
}
}
// główna pętla
int main( int argc, char* argv[] ) {
// identyfikator połączenia
int conn_id = 0;
// otwórz port nasłuchujący na gnieździe;
sf::TcpListener server;
server.listen( 1024 );
// przyjmuj kolejne połączenia nadchodzące
while( true ) {
// nawiązano połączenie z klientem?
if( server.accept( client[ conn_id ] ) == sf::Socket::Done ) {
std::cout << "Nawiązano połączenie z adresu " << client[ conn_id ].getRemoteAddress() << " otrzymało identyfikator nr " << conn_id << std::endl;
client[ conn_id ].setBlocking( false );
// utwórz nowy wątek dla połączenia
sf::Thread thread( &Client, conn_id );
thread.launch();
// ilość połączeń wzrosła, osiągnięto conn_limit? wyłącz serwer
if( conn_id < conn_limit ) conn_id++;
else { return 1; }
}
}
}