2016-05-12 5 views
0

Я пытаюсь получить UDP-пакеты от Arduino Uno. Пакеты принимаются компьютером (они видны в wirehark), но не отображаются в моем приложении Qt. Там часть моего UdP класса:UDP-входящие пакеты не отображаются в Qt

#include "udp.h" 

Udp::Udp(QHostAddress adr, quint16 pr) : QObject() 
{ 
    address.setAddress(adr.toString()); 
    port = pr; 
    socket = new QUdpSocket(); 
    status = socket->bind(address,port); 
    connect(socket,SIGNAL(readyRead()), this, SLOT(readUdp())); 
} 

void Udp::sendUdp(QByteArray out) 
{ 
    socket->writeDatagram(out,address,port); 
} 

QByteArray Udp::readUdp() 
{ 
    QByteArray input; 
    input.resize(socket->pendingDatagramSize()); 
    QHostAddress sender; 
    quint16 senderPort; 
    socket->readDatagram(input.data(),input.size(), 
          &sender,&senderPort); 

    return input; 
} 

socket-> pendingDatagramSize() возвращает 0 (и -1 иногда).

+0

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

ответ

0

Я не знаю, QT, но при использовании API сокетов Беркли, необходимо обеспечить обратный порядок байт

port = htons(pr); 

Когда приложение запущено, вы можете запустить NetStat -l в терминале. Ваша заявка должна появиться в списке

Смежные вопросы