#-------------------------------------------------
#
# Project created by QtCreator 2019-03-21T19:06:29
#
#-------------------------------------------------
QT += core gui
QT += network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = mychatroom
TEMPLATE = app
SOURCES += main.cpp\
widget.cpp
HEADERS += widget.h
FORMS += widget.ui
widget.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget</class>
<widget class="QWidget" name="Widget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>362</width>
<height>373</height>
</rect>
</property>
<property name="windowTitle">
<string>Widget</string>
</property>
<widget class="QTextBrowser" name="textBrowser">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>341</width>
<height>191</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>270</x>
<y>280</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>send(&S)</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_ip">
<property name="geometry">
<rect>
<x>10</x>
<y>320</y>
<width>81</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_receivePort">
<property name="geometry">
<rect>
<x>120</x>
<y>320</y>
<width>51</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_senderPort">
<property name="geometry">
<rect>
<x>200</x>
<y>320</y>
<width>61</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>270</x>
<y>320</y>
<width>75</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>initial(&I)</string>
</property>
</widget>
<widget class="QWidget" name="horizontalLayoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>280</y>
<width>261</width>
<height>31</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Ip address</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>21</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>recPort</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>sndPort</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QTextEdit" name="textEdit_send">
<property name="geometry">
<rect>
<x>10</x>
<y>210</y>
<width>341</width>
<height>61</height>
</rect>
</property>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class QUdpSocket;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
QUdpSocket * sender, * receiver;
bool isBinded;
private slots:
void processPendingDatagram();
void on_pushButton_2_clicked();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QtNetwork>
#include <QMessageBox>
#include <QDateTime>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
isBinded = false;
ui->lineEdit_ip->setText("127.0.0.1");
ui->lineEdit_receivePort->setText("45454");
ui->lineEdit_senderPort->setText("45454");
sender = new QUdpSocket(this);
receiver = new QUdpSocket(this);
connect(receiver, &QUdpSocket::readyRead, this, &Widget::processPendingDatagram);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
if(!isBinded)
{
QMessageBox::warning(NULL, "warning", "not binded", QMessageBox::Yes, QMessageBox::Yes);
return;
}
QHostAddress des = QHostAddress(ui->lineEdit_ip->text());
QByteArray datagram = ui->textEdit_send->toPlainText().toUtf8();
sender->writeDatagram(datagram.data(), datagram.size(), des, ui->lineEdit_senderPort->text().toInt());
ui->textBrowser->append("this\n"+QDateTime::currentDateTime().toString("yyyy-MM-dd:hh:mm:ss")+"\n"+datagram.data());
ui->textEdit_send->clear();
}
void Widget::processPendingDatagram()
{
while(receiver->hasPendingDatagrams())
{
QByteArray datagram;
QHostAddress des;
datagram.resize(receiver->pendingDatagramSize());
receiver->readDatagram(datagram.data(), datagram.size(), &des);
ui->textBrowser->append(des.toString()+"\n"+QDateTime::currentDateTime().toString("yyyy-MM-dd:hh:mm:ss")+"\n"+datagram.data());
}
}
void Widget::on_pushButton_2_clicked()
{
if(!isBinded)
{
//bind receiver port
receiver->bind(ui->lineEdit_receivePort->text().toInt(), QUdpSocket::ShareAddress);
isBinded = true;
}
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
运行截图