Russian Qt Forum

Qt => Общие вопросы => Тема начата: Павел_F. от Май 12, 2010, 10:56



Название: При запуске через QProcess не работают сокеты.
Отправлено: Павел_F. от Май 12, 2010, 10:56
Пишу сервер небольшой и клиента к нему. Общаются по udp. Если запускать каждого отдельно все работает. Но на этапе отладки это делать надоедает и на время я запуск серверной части засунул в клиентскую.
Код
C++ (Qt)
   QProcess process;
   process.start( "server");
 

Оба приложения лежат в одной папке. Если запустить самому, тыкая в них мышкой то друг друга находят и успешно общаются. Если вот так через QProcess. То никак общаться не хотят.
Интересно мне стало в чем тут проблема может быть?


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: ecspertiza от Май 12, 2010, 11:49
Просто в ф-ции start() нужно указать путь к файлу для запуска, насколько я понимаю ты работаешь под Linux тогда в твоем случае это будет так
Код:
QProcess process;
process.start( "./server");


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: Павел_F. от Май 12, 2010, 11:59
Не. Приложение-то как раз запускается, это видно через диспетчер задач. Но связь с ним по сети не наблюдается, хотя она есть и без каких-либо проблем если их оба руками запустить.
PS: сейчас все происходит под вин7, но планируется что и под линуксом будет работать.


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: ecspertiza от Май 12, 2010, 12:06
Ну тогда нужно больше информации, в каком месте валится софтина и какие сокеты используешь QUdpSocket QTcpSocket или сокеты Беркли?


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: crossly от Май 12, 2010, 12:20
запусти с помощью starttDetached()


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: Павел_F. от Май 12, 2010, 12:43
Через starttDetached тоже самое. Сокеты udp( QUdpSocket). Никто никуда не валится. Все нормально запустилось в процессах висит. Но данные по сокетам не ходят, хотя writeDatagram возвращает правильное значение, т.е. данные вроде послались, но на другой конец не пришли.


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: crossly от Май 12, 2010, 12:46
посмотри с помощью netstat слушается порт или нет...


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: Павел_F. от Май 12, 2010, 13:33
Уже смотрел, порт слушается в любом случае( без разницы как запускать).


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: ecspertiza от Май 12, 2010, 14:19
В общем скорее всего вот что происходит, запускается клиент, он запускает сервера, сервер не успевает начать прослушивать адрес, а клиет уже что то шлет, в итоге сначало пришел мессадж потом сервер начал слушать порт, получается сервер что то опять ждет.

попробуй после запуска сервера усыпить прогу на некоторое время

Код:
#include <windows.h>

Sleep(1000);

вариант конечно не лудший, но у меня заработало, если что могу тестовый пример кинуть.
 


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: Павел_F. от Май 12, 2010, 14:44
Если бы это было тср и он ждал запросы на подключение от клиентов то да. А тут udp. Не успел первую дейтаграмму принять, хрен с ней, вторую примем. Клиент просто периодически, когда надо, шлет на сервер сообщения( для теста поставил тупо раз в секунду). Сервер должен принять эти сообщения. Вот. bind у сервера проходит нормально( вернул true). Порты слушаются( согласно netstat). Приложения выполняются нормально( согласно диспетчеру задач). Клиент сообщения отправляет( writeDatagram вернула нужное число). Но до сервера они не доходят. Это если запускать через сервер QProcess. Если его запустить самому то все работает так, как должно. Да и руками я могу запустить сначала клиента, потом сервер и работает.

Может при запуске через QProcess нужно еще что-то указывать? А не тупо start? Мне оно в принципе и не надо, но интерестно стало до жути.


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: ecspertiza от Май 12, 2010, 15:33
Цитировать
Клиент сообщения отправляет( writeDatagram вернула нужное число).

Если возвращает нужное число значит по идее до сервера все таки достучался, как ты определяешь что до сервера не дошли пакеты?

В аттаче пример, все работает хорошо, сервер пишет данные о приеме сообщения от клиента и пишет их в лог, разве что из-за использования относительных путей, пишет в папку к клиенту а не в свою.


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: Павел_F. от Май 12, 2010, 20:55
Пришел домой. А дома у меня винды нет. Скомпилил свой проект под убунтой, все работает. Видимо какие-то приколы вин7. Завтра буду думать дальше. Я винду знаю довольно плохо, всю жизнь на линуксе.


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: ритт от Май 12, 2010, 23:56
собери тест ecspertiza'ы под семёркой и отпишись о результатах. если у кого-то результат повторится на семёрке или висте, рапортуй троллям...


Название: Re: При запуске через QProcess не работают сокеты.
Отправлено: Павел_F. от Май 13, 2010, 09:26
У меня в pro файле не было CONFIG += console
Добавил и заработало и под вин7. Странно. На линуксе и вин ХР без нее работает.