qt中的udp编程

UDP
QUdpSocket ---> upd socket

 

1.创建
QUdpSocket *p = new QUdpSocket();

2.最先接收数据一方 调用bind-> ip/port
bool QAbstractSocket::bind(const QHostAddress & address, quint16 port = 0, BindMode mode = DefaultForPlatform)
p->bind();

connect( ,SIGNAL(readyRead()),,SLOT(r));
3.接收数据
当 QUdpSocket 对象收到别一方发来的数据会发出信号 readyRead()
qint64 QUdpSocket::readDatagram(char * data, qint64 maxSize, QHostAddress * address = 0, quint16 * port = 0)
r()
{
p->readDatagram();

}
4.发数据
qint64 QUdpSocket::writeDatagram(const char * data, qint64 size, const QHostAddress & address, quint16 port)
p->writeDatagram();

recv.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QHostAddress>
#include<QUdpSocket>
#include<QByteArray>
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_pushButton_clicked();
    void getmsg();
    void on_pushButton_2_clicked();

private:
    Ui::Dialog *ui;
    QUdpSocket *up;
    QHostAddress *host;
    quint16 port,port1;
};

#endif // DIALOG_H
recv.cpp
#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

up = new QUdpSocket(this);
    port = 6501;

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
 up->bind(QHostAddress("192.168.1.30"),6501);
connect(up,SIGNAL(readyRead()),this,SLOT(getmsg()));
}
void Dialog::getmsg()
{//qDebug()<<host<<port;
    QByteArray buf;
  buf.resize(up->pendingDatagramSize());
    QHostAddress host1;
   // quint16 port1;
//qDebug()<<host<<port;
    up->readDatagram(buf.data(),buf.size(),&host1,&port1);
   // qDebug()<<buf.data();
    QString tmp(buf.data());
    ui->listWidget->addItem(tmp);
}

void Dialog::on_pushButton_2_clicked()
{//qDebug()<<host<<port;
host = new QHostAddress("192.168.1.30");

    QString tmp = ui->lineEdit->text();
    qDebug()<<tmp;

up->writeDatagram(tmp.toLatin1(),tmp.size(),*host,port1);
//qDebug()<<host<<port;

}
ui
/********************************************************************************
** Form generated from reading UI file 'dialog.ui'
**
** Created by: Qt User Interface Compiler version 5.5.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_DIALOG_H
#define UI_DIALOG_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QListWidget>
#include <QtWidgets/QPushButton>

QT_BEGIN_NAMESPACE

class Ui_Dialog
{
public:
    QPushButton *pushButton;
    QPushButton *pushButton_2;
    QListWidget *listWidget;
    QLabel *label;
    QLineEdit *lineEdit;

    void setupUi(QDialog *Dialog)
    {
        if (Dialog->objectName().isEmpty())
            Dialog->setObjectName(QStringLiteral("Dialog"));
        Dialog->resize(400, 300);
        pushButton = new QPushButton(Dialog);
        pushButton->setObjectName(QStringLiteral("pushButton"));
        pushButton->setGeometry(QRect(270, 100, 99, 27));
        pushButton_2 = new QPushButton(Dialog);
        pushButton_2->setObjectName(QStringLiteral("pushButton_2"));
        pushButton_2->setGeometry(QRect(290, 250, 99, 27));
        listWidget = new QListWidget(Dialog);
        listWidget->setObjectName(QStringLiteral("listWidget"));
        listWidget->setGeometry(QRect(20, 50, 221, 141));
        label = new QLabel(Dialog);
        label->setObjectName(QStringLiteral("label"));
        label->setGeometry(QRect(60, 20, 121, 17));
        lineEdit = new QLineEdit(Dialog);
        lineEdit->setObjectName(QStringLiteral("lineEdit"));
        lineEdit->setGeometry(QRect(80, 250, 141, 27));

        retranslateUi(Dialog);

        QMetaObject::connectSlotsByName(Dialog);
    } // setupUi

    void retranslateUi(QDialog *Dialog)
    {
        Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0));
        pushButton->setText(QApplication::translate("Dialog", "bind", 0));
        pushButton_2->setText(QApplication::translate("Dialog", "send", 0));
        label->setText(QApplication::translate("Dialog", "recv", 0));
    } // retranslateUi

};

namespace Ui {
    class Dialog: public Ui_Dialog {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_DIALOG_H
send.h
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QDebug>
#include<QUdpSocket>
#include<QHostAddress>
#include<QByteArray>
namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_pushButton_clicked();
    void getmsg();
private:
    Ui::Dialog *ui;
    QUdpSocket *up;
    QHostAddress *host,host1;
    quint16 port,port1;
};

#endif // DIALOG_H
send.cpp
#include
"dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); // up = new QUdpSocket; port = 6501; host = new QHostAddress("192.168.1.30"); up = new QUdpSocket(); } Dialog::~Dialog() { delete ui; } void Dialog::on_pushButton_clicked() { QString tmp = ui->lineEdit->text(); qDebug()<<tmp; up->writeDatagram(tmp.toLatin1(),*host,port); connect(up,SIGNAL(readyRead()),this,SLOT(getmsg())); } void Dialog::getmsg() { QByteArray buf; buf.resize(up->pendingDatagramSize()); QHostAddress host1; quint16 port1; up->readDatagram(buf.data(),buf.size(),&host1,&port1); //qDebug()<<buf.data(); QString tmp(buf.data()); ui->listWidget->addItem(tmp); }

 

posted @ 2016-04-01 10:39  高傲的monkey  阅读(3249)  评论(0编辑  收藏  举报