最近在做UDP传输的实验,在Fedora下用qt编完程序后,同时运行发送和接收程序,可以正常运行。然后将发送端和接收端用qte的qmake编译后发送到开发板上。先在开发板上运行接收端,在Fedora下运行发送端,也可以正常发送。但是在开发板上运行发送端,在Fedora下运行接收端的时候不能接收到数据。希望有大大能够帮忙解决。PS.不只是这组程序的问题,其它UDP传输的程序也存在这个问题,下面贴上源码,就是网上的HELLO WORLD程序。
【receiver】
**widget.h**
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtNetwork>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QUdpSocket *receiver;
private slots:
void processPendingDatagram();
};
#endif // WIDGET_H
**main.cpp**
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
**widget.cpp**
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
receiver = new QUdpSocket(this);
receiver->bind(QHostAddress::Any,45454,QUdpSocket::ShareAddress);
connect(receiver,SIGNAL(readyRead()),this,SLOT(processPendingDatagram()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::processPendingDatagram() //处理等待的数据报
{
while(receiver->hasPendingDatagrams()) //拥有等待的数据报
{
QByteArray datagram; //拥于存放接收的数据报
datagram.resize(receiver->pendingDatagramSize());
//让datagram的大小为等待处理的数据报的大小,这样才能接收到完整的数据
receiver->readDatagram(datagram.data(),datagram.size());
//接收数据报,将其存放到datagram中
ui->label->setText(datagram);
//将数据报内容显示出来
}
}
【sender】
**widget.h**
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QtNetwork>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QUdpSocket *sender;
private slots:
void on_pushButton_clicked();
};
#endif // WIDGET_H
**main.cpp**
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
**widget.cpp**
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
sender = new QUdpSocket(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
QByteArray datagram = "hello world!";
sender->writeDatagram(datagram.data(),datagram.size(),
QHostAddress::Broadcast,45454);
}
我用的版本是QT4.7.0,QTE4.7.1,编译过TCP传输文件的程序可以开发板和Fedora相互发送文件,就是UDP有这个问题,希望有大大可以帮忙。