crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

niklep
  опции профиля:
сообщение 23.4.2011, 20:32
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 11.4.2011
Пользователь №: 2590

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток. Пишу службу под windows, которая должна, помимо других действий, создавать серверный сокет и слушать его на предмет соединений. С этим казалось бы проблем быть не должно. Однако, несмотря на то, что объект класса QTcpServer говорит мне, что он слушает порт, этого не происходит. Т.е. меня обманывают=)
Вот кусок кода:
tcpServer = new QTcpServer(this);
        if (!tcpServer->listen(QHostAddress::LocalHost, nPort))
        {
                qDebug() << "Unable to start Server: " << tcpServer->errorString();
                tcpServer->close();
                return;
        }
        connect(tcpServer, SIGNAL(newConnection()),
                this, SLOT(slotNewConnection()));
        qDebug() << tcpServer->isListening() << "TCPSocket listen on port" << nPort;

Так вот. Ошибки не происходит, сокет создается. Последняя строка с qDebug() говорит следующее:
true TCPSocket listen on port 6667

Тем временем netstat не видит открытого порта, nmap также, telnet также о_0
Что не так? Службе нужны какие-то привилегии для открытия порта? Так я ей уже указал под админом запускаться, без толку.
P.S. Данный код для создания сокета прекрасно работает в моем маленьком тестовом проекте, здесь не хочет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
niklep
  опции профиля:
сообщение 24.4.2011, 11:28
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 11.4.2011
Пользователь №: 2590

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вот наткнулся на тему:
http://www.qtforum.org/article/27590/solve...l-not-work.html
В ней говорится, что служба (и ее конфиг в моем случае) должны лежать в windows\system32. Я так и сделал, но проблема не исчезла. Запускать пробовал как из командной строки ключом -e, так и из апплета "Службы".
Может еще есть какая-то хитрость с путями/правами?
И еще: емеет ли значение, что в main-файле службы имеется следующий код:
COMService service(argc, argv);
return service.exec();

А когда создаешь обычное приложение, то там
QApplication app(argc, argv);
return app.exec()

??? Ибо это единственное существенное различие в коде между службой и приложением (еще раз напомню, просто приложение у меня работает с этим классом ServerSocket)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.4.2025, 23:37