主题 : QTE的UDP通信问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 40502
精华: 0
发帖: 8
金钱: 40 两
威望: 8 点
综合积分: 16 分
注册时间: 2011-03-19
最后登录: 2012-03-17
楼主  发表于: 2011-05-09 16:48

 QTE的UDP通信问题

最近在做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有这个问题,希望有大大可以帮忙。