通过udp来进行通信,设置客户端和服务器来进行通信,利用qt的接口来实现qq聊天的类似功能,以下就直接晒出源码了:
实现结果如图所示:
服务器端的代码:
在.h文件中:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUdpSocket>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void processPengingDatagram();
private slots:
void on_pushButton_clicked();
void on_ClearBtn_clicked();
private:
Ui::MainWindow *ui;
QUdpSocket * udpSocket;
};
#endif // MAINWINDOW_H
在.cpp文件中:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
udpSocket = NULL;
udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::AnyIPv4,2222,QUdpSocket::ShareAddress);
connect(udpSocket, &QUdpSocket::readyRead, this, &MainWindow::processPengingDatagram);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::processPengingDatagram()
{
qDebug()<<"22222";
while (udpSocket->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
QString str;
str+=datagram+"\n";
ui->ReceiveEdit->append(str);
}
}
void MainWindow::on_pushButton_clicked()
{
QByteArray datagram = ui->WriteEdit->toPlainText().toLatin1();
quint16 Port = ui->portEdit->text().toInt();
QString IP = ui->ipEdit->text();
udpSocket->writeDatagram(datagram.data(), datagram.size(),
QHostAddress::Broadcast, Port);
}
void MainWindow::on_ClearBtn_clicked()
{
ui->ReceiveEdit->clear();
}
在main函数中,如下:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
界面端,布局如下:
需要源码的可以参考: https://download.csdn.net/download/Littlehero_121/12074982