Russian Qt Forum
Ноябрь 26, 2024, 11:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: При запуске через QProcess не работают сокеты.  (Прочитано 6351 раз)
Павел_F.
Гость
« : Май 12, 2010, 10:56 »

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

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

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #1 : Май 12, 2010, 11:49 »

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

Не. Приложение-то как раз запускается, это видно через диспетчер задач. Но связь с ним по сети не наблюдается, хотя она есть и без каких-либо проблем если их оба руками запустить.
PS: сейчас все происходит под вин7, но планируется что и под линуксом будет работать.
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Май 12, 2010, 12:06 »

Ну тогда нужно больше информации, в каком месте валится софтина и какие сокеты используешь QUdpSocket QTcpSocket или сокеты Беркли?
Записан
crossly
Гость
« Ответ #4 : Май 12, 2010, 12:20 »

запусти с помощью starttDetached()
Записан
Павел_F.
Гость
« Ответ #5 : Май 12, 2010, 12:43 »

Через starttDetached тоже самое. Сокеты udp( QUdpSocket). Никто никуда не валится. Все нормально запустилось в процессах висит. Но данные по сокетам не ходят, хотя writeDatagram возвращает правильное значение, т.е. данные вроде послались, но на другой конец не пришли.
Записан
crossly
Гость
« Ответ #6 : Май 12, 2010, 12:46 »

посмотри с помощью netstat слушается порт или нет...
Записан
Павел_F.
Гость
« Ответ #7 : Май 12, 2010, 13:33 »

Уже смотрел, порт слушается в любом случае( без разницы как запускать).
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #8 : Май 12, 2010, 14:19 »

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

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

Код:
#include <windows.h>

Sleep(1000);

вариант конечно не лудший, но у меня заработало, если что могу тестовый пример кинуть.
 
Записан
Павел_F.
Гость
« Ответ #9 : Май 12, 2010, 14:44 »

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

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

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #10 : Май 12, 2010, 15:33 »

Цитировать
Клиент сообщения отправляет( writeDatagram вернула нужное число).

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

В аттаче пример, все работает хорошо, сервер пишет данные о приеме сообщения от клиента и пишет их в лог, разве что из-за использования относительных путей, пишет в папку к клиенту а не в свою.
Записан
Павел_F.
Гость
« Ответ #11 : Май 12, 2010, 20:55 »

Пришел домой. А дома у меня винды нет. Скомпилил свой проект под убунтой, все работает. Видимо какие-то приколы вин7. Завтра буду думать дальше. Я винду знаю довольно плохо, всю жизнь на линуксе.
Записан
ритт
Гость
« Ответ #12 : Май 12, 2010, 23:56 »

собери тест ecspertiza'ы под семёркой и отпишись о результатах. если у кого-то результат повторится на семёрке или висте, рапортуй троллям...
Записан
Павел_F.
Гость
« Ответ #13 : Май 13, 2010, 09:26 »

У меня в pro файле не было CONFIG += console
Добавил и заработало и под вин7. Странно. На линуксе и вин ХР без нее работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.095 секунд. Запросов: 23.