#include "mywin.h"
#include <QNetworkInterface>
#include <QDebug>
#include <QMessageBox>
#define PORT 7788
#define MULTI_ADDR "224.55.55.55"
MyWin::MyWin(QWidget *parent) : QWidget(parent)
{
QList<QNetworkInterface> list;
QNetworkInterface intf;
list = QNetworkInterface::allInterfaces(); //获取系统里所有的网卡对象
for (int i = 0; i < list.size(); i++)
{
intf = list.at(i);
QNetworkInterface::InterfaceFlags flags = intf.flags();
//找出处在执行状态,能支持组播的网卡对象
if ((flags & QNetworkInterface::IsRunning) && (flags & QNetworkInterface::CanMulticast))
break;
}
edit = new QLineEdit;
btn = new QPushButton("send multicast");
connect(btn, SIGNAL(clicked(bool)), this, SLOT(slot_btn()));
hlayout = new QHBoxLayout(this);
hlayout->addWidget(edit, 8);
hlayout->addWidget(btn, 2);
udp = new QUdpSocket(this);
if (!udp->bind(QHostAddress::AnyIPv4, PORT))
{
QMessageBox::critical(this, "error", "bind failed");
exit(0);
}
udp->setMulticastInterface(intf);
resize(320, 200);
}
MyWin::~MyWin()
{
delete udp;
delete edit;
delete btn;
delete hlayout;
}
void MyWin::slot_btn()
{
QString str = edit->text();
udp->writeDatagram(str.toUtf8(), QHostAddress(MULTI_ADDR), PORT);
}