QT中的UDP编程(新人菜鸟,如有错误请指正)
# QUdpSocket<h2>QT的UDP协议:</h2>
1. windows的UDP编程模型
| 服务器 | 客户端 |
| -------------------------------------------- | ------------------------ |
| 0.协议版本信息 | 0.协议版本信息 |
| 1.创建socket | 1.创建socket |
| 2.服务器协议地址簇 | 2.获取服务器的协议地址簇 |
| 3.绑定 | 3.通信:往服务器发数据 |
| 4.接受客户端数据,顺百年获取客户端协议地址簇 | |
| 5. 关闭 | 4. 关闭 |
<strong>recv + accpet == recvfrom</strong>
<strong>send + connect ==sendto</strong>
2. QT的UDP编程模型
| 服务器 | 客户端 |
| ------------------------------------------------------------ | ---------------------------- |
| 1.创建socket对象 (QUdpSocket) | 1.创建socket对象(QUdpSocket) |
| 2.绑定(QUdpSocket::bind) | |
| 3.收数据 信号发送者:QUdpSocket对象信号接收者:当前对象信号:QUdpSocket::readyRead | 2.通信 |
| 4. 发数据收:readDatagram发: writeDatagram | |
| 5. 关闭 | 3. 关闭 |
<h2>服务器端的界面设计</h2>
![服务器端界面](https://gitee.com/youngrainforest/imag/raw/master/imag//image-20210225224113653.png)
<h2>客户端界面设计</h2>
![客户端界面](https://gitee.com/youngrainforest/imag/raw/master/imag//image-20210225224201888.png)
<strong>可以将textEdit_recv设置为ReadOnly</strong>
## QUdpSocket服务器端代码
0. 在.pro文件中添加
~~~c++
QT+=network
~~~
1. 创建socket对象
+ 在头文件中加入``#include <QUdpSocket>``
+ 在类的定义的private中添加`QUdpSocket* pQUdpSocket`
+ 在构造器中`pQUdpSocket = new QUdpSocket(this)`
2. 绑定
`pQUdpSocket->bind(8888)`,8888位服务器的端口号
3. 数据的接收(信号)
~~~c++
connect(pQUdpSocket,&QUdpSocket::readyRead,this,[=](){
//收数据
char buff={0};
QHostAddress ip;
quint16 port;
pQUdpSocket->readDatagram(buff,1024,&ip,&port);
//数据的显示
QString str = QString("ip:%1,port:%2,msg:%3").arg(ip.toString()).arg(port).grg(buff);
ui->textEdit_recv->append();
});
~~~
槽,到ui设计界面,选中发送的PushButton,右键转到槽,选择clicked()
~~~c++
//获取ip,port,msg
QString ip = ui->lineEdit_IP->text();
QString port = ui->lineEdit_port->text();
QString msg = ui->textEdit_send->toPlainText();
pQUdpSocket->writeDatagram(msg.toUtf8(),QHostAddress(ip),port.toUInt());
~~~
## QUdpSocket客户端代码
和服务端差不多,去掉绑定这一步就行了。 加油,QT自带的例子下面有完整的udp收发,广播例子,直接copy过来,改吧改吧,弄成类,不需要造轮子了。{:1_918:}
我就是这么干的。 楼上的大佬; 说的也可行; 或者度娘, G oogle 更好 , 刚好在学习TCP和UDP,感谢lz的分享:lol
页:
[1]