Seite 1 von 1

Mehrere QTcpSockets verwalten mit QTcpServer! Wie?

Verfasst: 22. Juli 2010 09:22
von jackmack
Hallo zusammen,

ich möchte mit meinem QTcpServer mehrere QTcpSockets verwalten.
Also ein Server der mehrere Clients bedient.

Jetzt lege ich mit jedem zurückgelieferten QTcpSocket aus QTcpServer::nextPendingConnection() einen Zeiger auf diese Instanz in einer Liste ab. Hat der Server Daten zu versenden, dann geh ich die Liste durch und sende somit an alle Clients.

Soweit so gut.

Bricht aber jetzt eine Verbindung ab, so bleibt mit ewig die Referenz auf diese Instanz in der Liste enthalten. Da am QTcpServer keine Methode zu finden ist wie z.B. ein QTcpServer::abortedConnection(QTcpSocket*), weiss ich nicht wie ich meine Liste sauber halten kann.

Nen Absturz hab ich dann, wenn ich auf die ungültige Referenz zugreife.
Zuerst nachprüfen ob die Verbindung noch gültig ist bringt auch nix. Nach einen disconnect hängt ja nur noch die Referenz in der Liste, dass Objekt dahinter gibts nicht mehr.

Jemand eine Ahnung wie ich das machen kann?

-jack

Verfasst: 22. Juli 2010 10:01
von Christian81
Ein QTcpSocket ist ein QObject also bekommt man auch mit wenn es zerstört wird.

Verfasst: 22. Juli 2010 10:09
von CaptnChaos
Du kannst glaube ich das signal "disconnected()" vom QTcpSocket benutzen.
Also quasi dann wenn du den client in deine Liste einfügst dieses signal auch mit einem Slot verbinden der dann den client aus deiner liste löscht.
Und sonst schick vor dem disconnect ein packet das dem Server mitteilt das der client weg ist.