基本流程
简单聊天程序
#include "server.h"
#include <QApplication>
#include "client.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
server w;
w.show();
Client c;
c.setWindowTitle("client");
c.show();
return a.exec();
}
#include "server.h"
#include "ui_server.h"
server::server(QWidget *parent) :
QWidget(parent),
ui(new Ui::server)
{
ui->setupUi(this);
ui->sip_port->setText("8888");
ui->cip_port->setText("9999");
ui->cip_lineEdit->setText("127.0.0.1");
udp1 = new QUdpSocket(this);
udp1->bind(ui->sip_port->text().toInt());
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->cip_lineEdit->text()),ui->cip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp1, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp1->pendingDatagramSize();
QByteArray array(size,0);
udp1->readDatagram(array.data(),size);
ui->log->append(array);
});
}
server::~server()
{
delete ui;
}
#ifndef SERVER_H
#define SERVER_H
#include <QWidget>
#include <QUdpSocket>
namespace Ui {
class server;
}
class server : public QWidget
{
Q_OBJECT
public:
explicit server(QWidget *parent = 0);
~server();
private:
Ui::server *ui;
QUdpSocket* udp1;
};
#endif // SERVER_H
#include "client.h"
#include "ui_client.h"
Client::Client(QWidget *parent) :
QWidget(parent),
ui(new Ui::Client)
{
ui->setupUi(this);
ui->sip_port->setText("8888");
ui->cip_port->setText("9999");
ui->sip_lineEdit->setText("127.0.0.1");
udp2 = new QUdpSocket(this);
udp2->bind(ui->cip_port->text().toInt());
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp2->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->sip_lineEdit->text()),ui->sip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp2, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp2->pendingDatagramSize();
QByteArray array(size,0);
udp2->readDatagram(array.data(),size);
ui->log->append(array);
});
}
Client::~Client()
{
delete ui;
}
#ifndef CLIENT_H
#define CLIENT_H
#include <QWidget>
#include <QUdpSocket>
namespace Ui {
class Client;
}
class Client : public QWidget
{
Q_OBJECT
public:
explicit Client(QWidget *parent = 0);
~Client();
private:
Ui::Client *ui;
QUdpSocket* udp2;
};
#endif // CLIENT_H
组播
#include "client.h"
#include "ui_client.h"
Client::Client(QWidget *parent) :
QWidget(parent),
ui(new Ui::Client)
{
ui->setupUi(this);
ui->sip_port->setText("8888");
ui->cip_port->setText("9999");
ui->sip_lineEdit->setText("127.0.0.1");
udp2 = new QUdpSocket(this);
// if you want to receive must bind port
//udp2->bind(ui->cip_port->text().toInt());
udp2->bind(QHostAddress::AnyIPv4,ui->cip_port->text().toInt());
// 加入到组播的组中
udp2->joinMulticastGroup(QHostAddress("244.0.0.10"));
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp2->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress(ui->sip_lineEdit->text()),ui->sip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp2, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp2->pendingDatagramSize();
QByteArray array(size,0);
udp2->readDatagram(array.data(),size);
ui->log->append(array);
});
}
Client::~Client()
{
delete ui;
}
#include "server.h"
#include "ui_server.h"
server::server(QWidget *parent) :
QWidget(parent),
ui(new Ui::server)
{
ui->setupUi(this);
ui->sip_port->setText("8888");
ui->cip_port->setText("9999");
ui->cip_lineEdit->setText("127.0.0.1");
udp1 = new QUdpSocket(this);
udp1->bind(ui->sip_port->text().toInt());
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress("240.0.0.10"),ui->cip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp1, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp1->pendingDatagramSize();
QByteArray array(size,0);
udp1->readDatagram(array.data(),size);
ui->log->append(array);
});
}
server::~server()
{
delete ui;
}
#include "server.h"
#include "ui_server.h"
server::server(QWidget *parent) :
QWidget(parent),
ui(new Ui::server)
{
ui->setupUi(this);
ui->sip_port->setText("8888");
ui->cip_port->setText("9999");
ui->cip_lineEdit->setText("127.0.0.1");
udp1 = new QUdpSocket(this);
udp1->bind(ui->sip_port->text().toInt());
// send msg
connect(ui->send, &QPushButton::clicked, this, [=](){
udp1->writeDatagram(ui->msg->toPlainText().toUtf8(),QHostAddress("255.255.255.255"),ui->cip_port->text().toInt());
ui->log->append("Me say: " + ui->msg->toPlainText());
ui->msg->clear();
});
// read msg
connect(udp1, &QUdpSocket::readyRead, this, [=](){
qint64 size = udp1->pendingDatagramSize();
QByteArray array(size,0);
udp1->readDatagram(array.data(),size);
ui->log->append(array);
});
}
server::~server()
{
delete ui;
}
文章来源地址https://www.toymoban.com/news/detail-504253.html
文章来源:https://www.toymoban.com/news/detail-504253.html
到了这里,关于Qt-udp(组播)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!