Mehrere QTcpSockets verwalten mit QTcpServer! Wie?

Alles rund um die Programmierung mit Qt
Antworten
jackmack
Beiträge: 13
Registriert: 1. Juni 2010 10:51

Mehrere QTcpSockets verwalten mit QTcpServer! Wie?

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ein QTcpSocket ist ein QObject also bekommt man auch mit wenn es zerstört wird.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag 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.
Antworten