Название: [solved]udp связь для многих клиентов в одном приложении Отправлено: pethead от Ноябрь 02, 2010, 04:45 вообще меня интресует можно на qt udp сделать так:
отсылаем на сервер датаграмму на заданный фикс. порт. далее нужно принять ответ, но приемный порт по идее должен задаваться в исх. датаграмме, но система задает его сама и что ставить в бинд я не знаю. на чистом Си я такое реализовал через sendto,select,recvfrom. задаю только исх. порт. ответ ловится. для чего это нужно : когда к серверу лезут несколько клиентов на один порт, а ответы он отдает на разные порты принятые в датаграмме. как сделать такое на qt? с помощью connecttohost? примерчик бы Название: Re: udp связь для многих клиентов в одном приложении Отправлено: pethead от Ноябрь 02, 2010, 10:30 ну вообщем я сделал что датаграмма уходит серверу на Destination Port (фиксированный), а тот отвечает на Source Port (который в датаграмме задается сокетной подсистемой, что видно в сниффере)
ingredients: m_pUdpSocket = new QUdpSocket(this); m_pUdpSocket->connectToHost(strHost, nPort); используем write: QByteArray arrBlock; QDataStream out(&arrBlock, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_7); out << (quint8)0x4C << (quint8)0x4D << (quint8)0x43 << (quint8)0x50 << (quint8)0x00 << (quint8)0x01 << (quint8)0xAA << (quint8)0xBB << (quint8)0x01 << (quint8)0x00 << (quint8)0x00; m_pUdpSocket->write(arrBlock); и slotReadyRead кторый срабатывает по m_pUdpSocket, SIGNAL(readyRead()) :) отсылку\прием наблюдаю через WireShark сниффер (сначала засовывал в буфер данные без (quint8) тогда уходили по 4 байта на каждый отправленный байт, на что мой сервер молчал :) не понимал команду, а через приведение (quint8) сразу ушел байтовый поток на кторый сервер ответил что и было зафиксировано сигналом ReadyRead) Название: Re: [solved]udp связь для многих клиентов в одном приложении Отправлено: pethead от Ноябрь 02, 2010, 13:08 так... теперь проблема в приеме ответа.
точнее ответ приходит, длина m_pUdpSocket->bytesAvailable() правильная, но вынуть байтовую последовательность что то не получается. нули какие то... хотя в сниффере четко видно что ответ от сервера правильный с нужными байтами. сервер никакого отношения у qt не имеет, это железка. :) так что не получится написать общение через через qt сокет с не-qt сокетом что ли? в примерах везде и клиент и сервер это qt сокеты. в момент изъятия байта из потока вылазит Код: quint8 j; QSocketNotifier: Invalid socket specified QSocketNotifier: Internal error что не так? *ступил! в мануале написано использовать read() переделал на QByteArray ba; ba=m_pUdpSocket->read(size); теперь работает как мне надо! Название: Re: [half-solved]udp связь для многих клиентов в одном приложении Отправлено: registrationfedser87 от Ноябрь 02, 2010, 13:32 Проверь без QDataStream-напрямую:
Код
|