QTcpServer не слушает порт, хотя говорит что слушает |
Здравствуйте, гость ( Вход | Регистрация )
QTcpServer не слушает порт, хотя говорит что слушает |
niklep |
23.4.2011, 20:32
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 11.4.2011 Пользователь №: 2590 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток. Пишу службу под windows, которая должна, помимо других действий, создавать серверный сокет и слушать его на предмет соединений. С этим казалось бы проблем быть не должно. Однако, несмотря на то, что объект класса QTcpServer говорит мне, что он слушает порт, этого не происходит. Т.е. меня обманывают=)
Вот кусок кода:
Так вот. Ошибки не происходит, сокет создается. Последняя строка с qDebug() говорит следующее:
Тем временем netstat не видит открытого порта, nmap также, telnet также о_0 Что не так? Службе нужны какие-то привилегии для открытия порта? Так я ей уже указал под админом запускаться, без толку. P.S. Данный код для создания сокета прекрасно работает в моем маленьком тестовом проекте, здесь не хочет. |
|
|
silver47 |
24.4.2011, 5:57
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: 6 |
В проект network добавить не забыли?
Вообще на каждое входящее соединение QTcpServer создает отдельный QTcpSocket:
У Вас подобное имеется? |
|
|
niklep |
24.4.2011, 9:36
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 11.4.2011 Пользователь №: 2590 Спасибо сказали: 0 раз(а) Репутация: 0 |
В проект network добавить не забыли? "Network library" через QT Project Settings добавлен. Вот код моего класса:
Вроде как все что надо создается... |
|
|
niklep |
24.4.2011, 11:28
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 11.4.2011 Пользователь №: 2590 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вот наткнулся на тему:
http://www.qtforum.org/article/27590/solve...l-not-work.html В ней говорится, что служба (и ее конфиг в моем случае) должны лежать в windows\system32. Я так и сделал, но проблема не исчезла. Запускать пробовал как из командной строки ключом -e, так и из апплета "Службы". Может еще есть какая-то хитрость с путями/правами? И еще: емеет ли значение, что в main-файле службы имеется следующий код:
А когда создаешь обычное приложение, то там
??? Ибо это единственное существенное различие в коде между службой и приложением (еще раз напомню, просто приложение у меня работает с этим классом ServerSocket) |
|
|
niklep |
24.4.2011, 18:12
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 11.4.2011 Пользователь №: 2590 Спасибо сказали: 0 раз(а) Репутация: 0 |
Проблему решил. Но не понял почему именно так=) Описываю:
Ранее метод start моей службы выглядел так (обратите внимание на последнюю строчку):
Теперь так:
В чем принципиальное отличие создания объекта первым методом и вторым? Гуру, подскажите. Я все время думал, что разницы никакой... |
|
|
MoPDoBoPoT |
24.4.2011, 21:30
Сообщение
#6
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Отличие в том, что в первом случае объект ServerSocket создаётся на стеке и, при выходе из метода start(), будет сразу же уничтожен, а во втором случае - в куче, из-за чего продолжает "жить" после выхода из метода start().
Эта особенность относится к C++, а не к Qt. |
|
|
Текстовая версия | Сейчас: 27.12.2024, 22:53 |