widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QUdpSocket>//UDP套接字
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void dealMessage();//槽函数,处理对方发送的数据
private slots:
void on_buttonSend_clicked();
private:
Ui::Widget *ui;
QUdpSocket *udpSocket;//套接字
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QUdpSocket>
#include<QHostAddress>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
udpSocket=new QUdpSocket(this);
//绑定
udpSocket->bind(8888);
setWindowTitle("服务器端口8888");
//接受
//当对方发送信息,自动触发readyRead()
connect(udpSocket,QUdpSocket::readyRead,this,&Widget::dealMessage);
}
void Widget::dealMessage()
{
//读取对方发送的内容
char buf[1024]={0};
QHostAddress cliAddr;
quint16 port;
qint64 len=udpSocket->readDatagram(buf,sizeof(buf),&cliAddr,&port);
if(len>0)
{
QString str=QString("[%1:%2] %3").arg(cliAddr.toString()).arg(port).arg(buf);
//给编辑区设定内容
ui->textEdit->setText(str);
}
}
Widget::~Widget()
{
delete ui;
}
//发送按钮
void Widget::on_buttonSend_clicked()
{
//获取对方的ip和端口
QString ip=ui->ipEdit->text();
qint16 port=ui->portEdit->text().toInt();
//获取编辑区内容
QString str=ui->textEdit->toPlainText();
//给指定的ip发送信息
udpSocket->writeDatagram(str.toUtf8(),QHostAddress(ip),port);
}
ui