![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Andrewshkovskii |
![]()
Сообщение
#1
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Есть клиент (наслденик QTcpSocket) , в нем реализованы функции запроса к серверу :
Сервер от QTcpServer :
И клиентский поток от QThread :
Первый раз пишу клиент/сервер. Но почему-то у меня не запускается поток, т.е. получается что сокет не генирирует сигнал readyRead? А почему, ведь данные приходят от клиента..нет ? Сообщение отредактировал Andrewshkovskii - 15.5.2010, 19:34 |
|
|
![]() |
Andrewshkovskii |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: ![]() ![]() ![]() |
Мне передать указатель на сокет в этот объект, или же просто определить слот в котором буду писать в сокет ?
А нельзя ли сокет "передвинуть" ( moveToThread() ) в clientThread поток? Сделал объект :
И код run() :
В консоль приходит только : reading client, данные с сокета почему-то не считываются.. Сделал небольшую отладку.. в requestType находиться 0..получается данные куда-то делись, либо я не правильно их читаю. Записываю вот так :
Сообщение отредактировал Andrewshkovskii - 16.5.2010, 17:06 |
|
|
kibsoft |
![]()
Сообщение
#3
|
Участник ![]() ![]() Группа: Участник Сообщений: 180 Регистрация: 21.7.2009 Из: Самара Пользователь №: 928 Спасибо сказали: 14 раз(а) Репутация: ![]() ![]() ![]() |
Цитата А нельзя ли сокет "передвинуть" ( moveToThread() ) в clientThread поток? 1) Socket и находиться в потоке clientThread(т.к. он определен в этом классе). А сам clientThread находиться в основном потоке. Т.е. есть основной поток, который создал clientThread(новый поток). 2) if( socket->bytesAvailable() < nextBlockSize) { return; } Косяк у тебя с первого взгляда здесь. Т.е. когда не все данные пришли ты выходишь из слота, но в следующий раз у тебя слот опять будет читать размер пакета и следовательно все нарушится(читать будет не те данные). Ну и естественно в requestType у тебя случайные данные.. Поэтому лучше сделай цикл бесконечный. В Шлее книге есть пример принятия. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 14.7.2025, 9:12 |