2016-05-12 7 views
0

Ich versuche, UDP-Pakete von einem Arduino Uno zu empfangen. Pakete werden vom Computer empfangen (sie sind in Wireshark sichtbar), sind aber in meiner Qt-Anwendung nicht zu sehen. Es ist Teil meiner Udp Klasse:UDP eingehende Pakete in Qt nicht sichtbar

#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 zurück (und -1 manchmal).

+0

Ich sehe keine Fehler in Ihrem Code, der einzige Grund, warum Sie ein Ready Read erhalten konnten und keine Datagramme zu lesen finden, ist, weil der Socket geändert wird .. aber scheint nicht Ihr Fall. – Marco

Antwort

0

Ich weiß QT nicht, aber wenn berkely Socket-API verwenden, müssen Sie

port = htons(pr); 

Endian zu gewährleisten, wenn die Anwendung ausgeführt wird, können Sie netstat -l in einem Terminal ausgeführt werden. Ihre Anwendung sollte in der Liste erscheinen

Verwandte Themen