码迷,mamicode.com
首页 > 编程语言 > 详细

【C/C++学院】(20)QT:udp通信

时间:2015-03-03 22:12:51      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:

基于QT的UDP协议的通信

#-------------------------------------------------
#
# Project created by QtCreator 2014-05-22T21:39:26
#
#-------------------------------------------------

QT       += core gui
QT += network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = udpchat
TEMPLATE = app


SOURCES += main.cpp        dialog.cpp

HEADERS  += dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QUdpSocket>

class Dialog : public QDialog
{
    Q_OBJECT

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

private:
    QLabel *label1, *label2, *label3, *label4;
    QLineEdit *edit1, *edit2, *edit3, *edit4;
    QPushButton *btn1, *btn2;
    QUdpSocket *udpsocket;


private slots:
    void on_clicked1();
    void on_clicked2();
    void dataReceived();
};

#endif // DIALOG_H

#include "dialog.h"
#include <QMessageBox>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QByteArray>
#include <QHostAddress>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    udpsocket = new QUdpSocket(this);

    setWindowTitle(tr("udp聊天"));//设置窗口标题
    label1 = new QLabel;
    label1->setText(tr("请输入bind端口号"));
    label2 = new QLabel;
    label2->setText(tr("请输入目的IP地址"));
    label3 = new QLabel;
    label3->setText(tr("请输入目的端口号"));
    label4 = new QLabel;
    label4->setText(tr("请输入发送消息"));


    edit1 = new QLineEdit;
    edit2 = new QLineEdit;
    edit3 = new QLineEdit;
    edit4 = new QLineEdit;

    btn1 = new QPushButton;
    btn1->setText(tr("bind"));//设置btn1标题
    btn2 = new QPushButton;
    btn2->setText(tr("发送"));//设置btn2标题

    QGridLayout *layout1 = new QGridLayout(this);

    layout1->addWidget(label1, 0, 0);//加入label1控件
    layout1->addWidget(edit1, 0, 1);//加入edit1控件
    layout1->addWidget(btn1, 1, 0);//加入btn1控件
    layout1->addWidget(label2, 2, 0);//加入label2控件
    layout1->addWidget(edit2, 2, 1);//加入edit2控件
    layout1->addWidget(label3, 3, 0);//加入label3控件
    layout1->addWidget(edit3, 3, 1);//加入label3控件
    layout1->addWidget(label4, 4, 0);//加入label4控件
    layout1->addWidget(edit4, 4, 1);//加入label4控件
    layout1->addWidget(btn2, 5, 0);//加入btn2控件

    connect(btn1, SIGNAL(clicked()), this, SLOT(on_clicked1()));
    connect(btn2, SIGNAL(clicked()), this, SLOT(on_clicked2()));
    connect(udpsocket, SIGNAL(readyRead()), this, SLOT(dataReceived()));

}

Dialog::~Dialog()
{

}

void Dialog::on_clicked1()
{
    udpsocket->close();
    udpsocket->bind(edit1->text().toInt());
}

void Dialog::on_clicked2()
{
    QHostAddress addr;
    addr.setAddress(edit2->text());
    int port = edit3->text().toInt();
    udpsocket->writeDatagram(edit4->text().toUtf8(), addr, port);
}

void Dialog::dataReceived()//接收socket消息的槽函数
{
    QHostAddress addr;
    char buf[1024];
    while(udpsocket->hasPendingDatagrams())
    {
        memset(buf, 0, sizeof(buf));
        udpsocket->readDatagram(buf, sizeof(buf), &addr);
        QMessageBox::information(this, tr("消息"), tr("来自") + addr.toString() + tr("的消息:\n") + buf);
    }
}


技术分享







【C/C++学院】(20)QT:udp通信

标签:

原文地址:http://blog.csdn.net/waldmer/article/details/44019647

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!