Multiple socket notifiers for same socket 3640 and type Read, Не получается опрашивать сокет по таймеру. |
Здравствуйте, гость ( Вход | Регистрация )
Multiple socket notifiers for same socket 3640 and type Read, Не получается опрашивать сокет по таймеру. |
gvenihvivar |
7.3.2014, 12:51
Сообщение
#1
|
Студент Группа: Участник Сообщений: 36 Регистрация: 6.11.2013 Пользователь №: 3967 Спасибо сказали: 0 раз(а) Репутация: 0 |
Скопировала пример tcp сервера и сокета отсюдова.
В изначальном виде он прекрасно работает. Но для моей задачи необходимо, чтобы инициатором опроса раз в секунду был сервер, который находится на пк. А удаленное устройство отвечало на этот запрос. Таймер я вставила и в принципе запросы сервер исправно отправляет. Связка выглядит следующим образом:
SLOT(slotSendToClient()) содержит код, который отправляет сообщение. Дескриптор pCS = pClientSocket->socketDescriptor() это статическая переменная, объявленная вне класса (не уверенна, как ее правильно обозвать). И сам слот:
В итоге после каждой отработки сокета появляется ошибка QSocketNotifier: Multiple socket notifiers for same socket 3640 and type Read. Подскажите как избавится от ошибки. Идеи уже все закончились. Пыталась избавиться от дескриптора. Объявила сокет в хидере, но программа завершается ошибкой. |
|
|
Trisch |
7.3.2014, 14:56
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: 0 |
Можете показать полный код проекта?
|
|
|
gvenihvivar |
7.3.2014, 15:59
Сообщение
#3
|
Студент Группа: Участник Сообщений: 36 Регистрация: 6.11.2013 Пользователь №: 3967 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вот весь код программы
main Раскрывающийся текст
myserver.h Раскрывающийся текст
myserver.cpp Раскрывающийся текст
|
|
|
Trisch |
9.3.2014, 23:09
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: 0 |
Как вариант, проблема может быть из-за того что у вас несколько сокетов с одним дескриптером.
Для примера можете посмотреть реализацию клиента и сервера в книге "Макс Шлее Профессиональное программирование на C++" |
|
|
gvenihvivar |
10.3.2014, 23:02
Сообщение
#5
|
Студент Группа: Участник Сообщений: 36 Регистрация: 6.11.2013 Пользователь №: 3967 Спасибо сказали: 0 раз(а) Репутация: 0 |
ok, спасибо за наводку)
|
|
|
Yuriy |
12.3.2014, 23:34
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 8.10.2013 Пользователь №: 3949 Спасибо сказали: 1 раз(а) Репутация: 0 |
Вы, видимо, не очень понимаете, что делаете, поэтому совет про книжку - самый разумный )) А если по коду, то причина, по которой не работает (на самом деле этот код вообще работать нормально не будет никогда):
void MyServer::slotNewConnection() { QTcpSocket* pClientSocket = m_ptcpServer->nextPendingConnection(); /* Тут у Вас возвращается объект QTcpSocket*/ ... QTimer *timer = new QTimer(this); /* А подумайте, что будет, если клиент разорвет соединение, а потом восстановит? */ ... } void MyServer::slotSendToClient() { QTcpSocket *clientSocket = new QTcpSocket; /* А тут создается новый QTcpSocket, ну совсем не тот, что в ф-ии MyServer::slotNewConnection(), и так каждую секунду! */ ... } В общем - читайте, а будут вопросы - спрашивайте. ) |
|
|
Текстовая версия | Сейчас: 3.1.2025, 12:25 |