QTcpServer - przekazywanie deskryptora QSocketa

0

Witam, chcę zrobić wielowątkowy serwer (z użyciem QThreadpool) ale mam problem już na początku, mianowicie, wyczytałem że jest jakiś problem z przekazywaniem między wątkami wskaźnika na QTcpSocket i lepiej jest stworzyć obiekt QTcpSocket w nowym wątku i przekazać do niego deskryptor tego nowego połączenia. Problem jest taki że nie wykrywa tego połączenia.

class Server : public QTcpServer {
  //wszystko inne
protected:
 void incomingConnection(qintptr descriptor);
}

//w cpp
//@overwrite
void Server::incomingConnection(qintptr descriptor) {
 qDebug() <<"NOwe polaczenie";
}

Problem w tym, że mimo ze poprawnie łączę się z serwerem, nie wywołuje w ogóle tej metody. Z nextPendingCOnnection i sygnalem newConnection nie ma problemu (tyle ze wtedy zwracany jest QSocket a nie deskryptor). Pozdrawiam

0

Czy na pewno obsługa połączeń TCP musi odbywać się wielowątkowo? Możesz wysłać w obecnym wątku sygnał ze sczytanymi danymi, który by był obsłużony gdzie indziej.

Kod - tyle ile go podałeś - wygląda ok, ale może po prostu używasz go na obiekcie QTcpServer, zamiast utworzyć Server?

0

No chyba musi. Chcę aby serwer obsługiwał wielu klientów, którzy się porozumiewają między sobą.

2

Nie musisz blokująco czekać na następną wiadomość, od tego jest mechanizm sygnałów i slotów. Tylko to wymaga to ciut innego myślenia: sloty nie mogą wykonywać żadnych operacji, które nie kończą się natychmiast.

0

Hmm w takim razie po co robić asynchroniczne serwery na ThreadPoolu skoro nie trzeba?

1 użytkowników online, w tym zalogowanych: 0, gości: 1