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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Взаимодействие qt- и не qt-приложений  (Прочитано 4900 раз)
0...-5
Гость
« : Октябрь 05, 2010, 11:36 »

Здравствуйте, возник казалось бы абсурдный вопрос: можно ли организовать обмен данными по протоколу udp между приложением qt и стандартным c++? Написал тестовый примерчик, который почему-то не работает:

Qt - отправка дейтаграммы:
Код:
QByteArray datagram;
QDataStream out(&datagram, QIODevice::WriteOnly);
int d = 10;
out << d;
f_udp_socket.writeDatagram(datagram, QHostAddress::LocalHost, 6000);

Код получателя:
Qt - отправка дейтаграммы:
Код:
WSADATA wsaData;
WSAStartup(MAKEWORD( 2, 0 ), &wsaData );

struct sockaddr_in address;
int reciever = socket(AF_INET, SOCK_DGRAM, 0);

address.sin_family = AF_INET;
address.sin_port = htons(6000);
address.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
bind(reciever, (struct sockaddr*)&address, sizeof(address));

int data;
while(true)
   int bytes = recv(reciever, (char*)&data, sizeof(data), 0);

Как вы, возможно догадались, до получателя доходили неверные данные.
Записан
navrocky
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #1 : Октябрь 05, 2010, 11:47 »

Написал тестовый примерчик, который почему-то не работает:
Код:
QByteArray datagram;
QDataStream out(&datagram, QIODevice::WriteOnly);
int d = 10;
out << d;
f_udp_socket.writeDatagram(datagram, QHostAddress::LocalHost, 6000);

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

То есть ты данные все-таки получаешь?

Что понимается под неверными данными? QDataStream сериализует по своему собственному протоколу, поэтому там помимо данных идет еще доп. инфа.

Если хочешь сырые данные отправлять то зови
Код:
f_udp_socket.write(&d, sizeof(d), QHostAddress::LocalHost, 6000);
Записан

Гугль в помощь
0...-5
Гость
« Ответ #2 : Октябрь 05, 2010, 11:56 »

Да, получаю, но судя по всему там идет переполнение инта...Спасибо большое, попробую этот метод, как-то сразу не додумался а сделал все по примеру из книги
Записан
ufna
Гость
« Ответ #3 : Октябрь 05, 2010, 12:03 »

Не используй QDataStream в этом случае. Это такая штука, для которой верно, что если ей писали, ей и надо читать, об этом в доках написано.
Записан
mkv
Гость
« Ответ #4 : Октябрь 05, 2010, 12:37 »

а еще есть little-endian и big-endian
Записан
merke
Гость
« Ответ #5 : Октябрь 05, 2010, 12:44 »

а еще есть little-endian и big-endian

как раз с этим сталкивался когда нужно было с сервера, который написан на qt передавать данные на клиент, который был написан на VB6
Также санчала пытался передавать данные используя QDataStream, потом просто стал передавать данные методом write.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Октябрь 05, 2010, 14:36 »

а еще есть little-endian и big-endian
Да, и по умолчанию QDataStream сохраняет в big endian. Стоит поменять (setByteOrder) и проверить
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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