Russian Qt Forum

Qt => Работа с сетью => Тема начата: 0...-5 от Октябрь 05, 2010, 11:36



Название: Взаимодействие qt- и не qt-приложений
Отправлено: 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);

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


Название: Re: Взаимодействие qt- и не qt-приложений
Отправлено: navrocky от Октябрь 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);


Название: Re: Взаимодействие qt- и не qt-приложений
Отправлено: 0...-5 от Октябрь 05, 2010, 11:56
Да, получаю, но судя по всему там идет переполнение инта...Спасибо большое, попробую этот метод, как-то сразу не додумался а сделал все по примеру из книги


Название: Re: Взаимодействие qt- и не qt-приложений
Отправлено: ufna от Октябрь 05, 2010, 12:03
Не используй QDataStream в этом случае. Это такая штука, для которой верно, что если ей писали, ей и надо читать, об этом в доках написано.


Название: Re: Взаимодействие qt- и не qt-приложений
Отправлено: mkv от Октябрь 05, 2010, 12:37
а еще есть little-endian и big-endian


Название: Re: Взаимодействие qt- и не qt-приложений
Отправлено: merke от Октябрь 05, 2010, 12:44
а еще есть little-endian и big-endian

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


Название: Re: Взаимодействие qt- и не qt-приложений
Отправлено: Igors от Октябрь 05, 2010, 14:36
а еще есть little-endian и big-endian
Да, и по умолчанию QDataStream сохраняет в big endian. Стоит поменять (setByteOrder) и проверить