Russian Qt Forum
Сентябрь 22, 2024, 08:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Непонятная проблема с передачей сообщений по tcp между клиентом и сервером  (Прочитано 12622 раз)
Alhin
Гость
« Ответ #15 : Ноябрь 04, 2009, 17:42 »

Я, наконец то, нашел решение проблемы, нужно было QTcpSocket для клиентского потока создавать на стороне сервера, а не в клиентском потоке. Как только я так сделал, то все заработало нормально.

BRE, спасибо большое за помощь!
« Последнее редактирование: Ноябрь 05, 2009, 10:56 от Alhin » Записан
niXman
Гость
« Ответ #16 : Декабрь 06, 2009, 04:08 »

Цитировать
Я, наконец то, нашел решение проблемы, нужно было QTcpSocket для клиентского потока создавать на стороне сервера, а не в клиентском потоке.
Поясните пожалуйста. Любопытно Подмигивающий
Записан
VisJiser
Гость
« Ответ #17 : Декабрь 22, 2009, 09:05 »

выложите пожалуйста исправленный пример
« Последнее редактирование: Декабрь 22, 2009, 09:25 от VisJiser » Записан
VisJiser
Гость
« Ответ #18 : Декабрь 22, 2009, 15:48 »

мде..несколько дней убил.
если кому то интересно что за трабла и решение, то стоит почитать ветку http://forum.vingrad.ru/act-ST/f-466/t-267120.html#st_15_view_0
зы: по моему Alhin сделал из многопоточного сервера однопоточный, если я правильно понял его объяснения. впрочем из меня программер никакой, так что на авторитетность не заявляю
« Последнее редактирование: Декабрь 23, 2009, 00:52 от VisJiser » Записан
Alhin
Гость
« Ответ #19 : Январь 22, 2010, 22:37 »

Вы не правы, сервер прекрасно работает со многими клиентами, каждый из которых обслуживается в отдельном потоке.
Записан
Alhin
Гость
« Ответ #20 : Январь 22, 2010, 22:55 »

По поводу пояснения:
Цитировать
Я, наконец то, нашел решение проблемы, нужно было QTcpSocket для клиентского потока создавать на стороне сервера, а не в клиентском потоке.

Для того что бы решить проблему, которая у меня возникла в классе сервера, наследнике QTcpServer, надо переопределить процедуру
Код:
virtual void incomingConnection ( int socketDescriptor )
в которой написать, что то вроде:

Код:
 
void incomingConnection ( int socketDescriptor ){
    QTcpSocket *clientSocket = new QTcpSocket(this);
    clientSocket->setSocketDescriptor(socketDescriptor);
    ClientThread *thread = new ClientThread(clientSocket, this);
    ...
}

Где ClientThread - класс потока(наследник QThread), в котором обрабатывается каждое клиентское соединение. ClientThread имеет конструктор:

Код:
ClientThread::ClientThread(QTcpSocket *socket, QObject = 0){
   ...
}

 
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 21.